FFMPEG Concat видео аудио не синхронизируется при воспроизведении через

644
russell

Некоторое время пытался сделать это правильно, задаваясь вопросом, сталкивался ли кто-нибудь с чем-то подобным раньше.

Я пытаюсь объединить папку с несколькими видеоклипами, некоторые со звуком, некоторые без и с фотографиями, которые были преобразованы в 10-секундное видео.

К клипам, в которых нет звука и преобразованных фотографий, добавлена ​​тихая дорожка mp3. (Это также добавляется в клипы со звуком)

Эта проблема возникает, когда присутствует одна из конвертированных фотографий или видеоклипов без звука, и звук начинает очень медленно синхронизироваться, поскольку вы замечаете только то, что кто-то говорит.

Проблема также возникает с папкой, в которой есть только видеоклипы со звуком, если для видеоклипов со звуком также не добавлена ​​беззвучная дорожка.

Что странно, так это то, что при воспроизведении выходного видео и звука происходит несинхронизация, если вы переходите к тому месту, где оно впервые вышло из синхронизации, оно само исправляется, но затем снова не синхронизируется, если воспроизводится с самого начала.

FFMPEG VERSION INFO:

ffmpeg version 3.3.4-1~16.04.york0 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609 configuration: --prefix=/usr --extra-version='1~16.04.york0' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared libavutil 55. 58.100 / 55. 58.100 libavcodec 57. 89.100 / 57. 89.100 libavformat 57. 71.100 / 57. 71.100 libavdevice 57. 6.100 / 57. 6.100 libavfilter 6. 82.100 / 6. 82.100 libavresample 3. 5. 0 / 3. 5. 0 libswscale 4. 6.100 / 4. 6.100 libswresample 2. 7.100 / 2. 7.100 libpostproc 54. 5.100 / 54. 5.100 

Вот полный скрипт, который я использую ниже:

cd videoClips  for i in $(ls);do if [[ $i =~ .*\.zip ]];then echo "ZIP"  y=$ echo $y  mkdir tmp_$y unzip $i -d tmp_$y  cd tmp_$y  for i in $(ls);do if [[ $i =~ .*\.jpg$ ]];then ffmpeg -loop 1 -i $i -c:v libx264 -c:a aac -vf scale=1280:-2 -r 30 -t 10 -pix_fmt yuv420p $i.mp4 #Add Silent Audio Track ffmpeg -i $i.mp4 -i ../SilentAudio.mp3 -vcodec copy -shortest $i.AUDIO.mp4 #Remove files rm -rf $i.mp4 rm -rf $i fi done  #Add check  for F in *.mp4 ; do echo "CHECK -> $F" result=`ffprobe -i $F -show_streams 2>&1 | grep 'Stream #0:1'` echo "$result" #if [[ $result =~ .*aac$ ]];then if [[ $result == *"aac"* ]];then echo "AUDIO FOUND" ffmpeg -i $F -i ../SilentAudio.mp3 -vcodec copy -shortest $F.FIN.mp4 rm -rf $F else #echo "AUDIO NOT FOUND" ffmpeg -i $F -i ../SilentAudio.mp3 -vcodec copy -shortest $F.FIN.mp4 rm -rf $F fi done  for F in *.mp4 ; do ffmpeg -i $F -c copy -bsf:v h264_mp4toannexb -f mpegts $(echo $F | perl -pe 's/mp4$/ts/g'); done ffmpeg -i "concat:$(ls -1v *.ts | perl -0pe 's/\n/|/g;s/\|$//g')" -qscale 0 -c copy -bsf:a aac_adtstoasc $y.mp4 cd ../ fi done  

У меня есть ощущение, что это может быть связано с аудио битрейтом? Или возможные метки времени. Также попытался добавить apad, но это, похоже, усугубило проблему синхронизации.

0
Для JPG-видео используйте `ffmpeg -loop 1 -i $ i -t 1 -f lavfi -i anullsrc -c: v libx264 -c: aac -vf scale = 1280: -2 -r 30 -t 10 -pix_fmt yuv420p $ i.mp4`. Аналогично, для видео без звука не используйте MP3. бросьте `-shortest` и используйте` -t 1 -f lavfi -i anullsrc` Gyan 6 лет назад 0
Спасибо за сообщение - просто попытался обновить, чтобы переключиться с помощью mp3 и запустил новый скрипт. Выходной файл, кажется, полностью останавливается при попытке воспроизведения 2-го клипа (первый был видео со звуком, второй был видео jpg), это новый скрипт https://pastebin.com/t1mvjMVS - также это может вызвать проблемы при запуске concat появилось много таких сообщений: [mp4 @ 0x2e5ad70f80] Немонотонный DTS в выходном потоке 0: 1; предыдущий: 667648, текущий: 665464; изменение на 667649. Это может привести к неправильным временным меткам в выходном файле. russell 6 лет назад 0
@Mulvya Только что попробовал ffprobe, так как кажется, что он поврежден, это был вывод: https://pastebin.com/Eja5gmga, думая, что я мог неправильно добавить команду для видео без звука. russell 6 лет назад 0
После дополнительных испытаний кажется, что это происходит только на Mac, и это правильно и синхронно в Windows. На Mac также, если вы пропустите немного вперед, звук снова будет синхронизирован. russell 6 лет назад 0

0 ответов на вопрос

Похожие вопросы