FFMPEG-Concat-Video-Audio wird bei der Wiedergabe nicht synchron

735
russell

Versucht schon seit einiger Zeit, dies richtig zu machen, und fragt sich, ob jemand schon einmal auf so etwas gestoßen ist.

Ich versuche, einen Ordner zu erstellen, der mehrere Videoclips enthält, einige mit Ton, einige ohne und Fotos, die in ein 10-Sekunden-Video umgewandelt wurden.

Bei Clips, die kein Audio und keine konvertierten Fotos enthalten, wird eine stille MP3-Spur hinzugefügt. (Dies wird auch Clips mit Sound hinzugefügt)

Das Problem tritt auf, wenn eines der konvertierten Fotos oder Videoclips ohne Audiodaten vorhanden ist und das Audiosignal leicht nicht mehr synchron ist, da Sie nur bemerken, wenn Sie jemanden sprechen sehen.

Das Problem tritt auch bei einem Ordner mit nur Videoclips auf, die Ton enthalten, wenn den Videoclips mit Ton nicht auch die stille Spur hinzugefügt wurde.

Merkwürdig ist, dass bei der Wiedergabe des Ausgangsvideos und der Audioübertragung die Synchronisation verloren geht, wenn Sie vorwärts zu der Stelle springen, an der sie nicht synchronisiert wurde. Sie wird jedoch von selbst repariert.

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 

Hier ist das vollständige Skript, das ich unten verwende:

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  

Ich habe das Gefühl, es könnte etwas mit der Audio-Bitrate zu tun haben? Oder möglich die Zeitstempel. Es wurde auch versucht, Apad hinzuzufügen. Dies schien jedoch das Synchronisierungsproblem zu verschlimmern.

0
Verwenden Sie für JPG-Videos 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`. Verwenden Sie für Videos ohne Ton ebenfalls keine MP3-Dateien. Lassen Sie `-shortest` fallen und gehen Sie zu -t 1 -f lavfi -i anullsrc Gyan vor 6 Jahren 0
Vielen Dank für die Nachricht. Ich habe gerade versucht, das MP3-Programm auszutauschen und das neue Skript auszuführen. Die Ausgabedatei schien beim Versuch, den 2. Clip abzuspielen, vollständig zu stoppen (erstens ein Video mit Sound, zweitens ein Jpg-Video). Dies ist das neue Skript https://pastebin.com/t1mvjMVS. Dies könnte ebenfalls zu Problemen führen Beim Ausführen der Concat-Lots dieser Nachrichten sind folgende aufgetreten: [mp4 @ 0x2e5ad70f80] Nicht monotoner DTS im Ausgabestrom 0: 1; vorher: 667648, aktuell: 665464; Änderung in 667649. Dies kann zu falschen Zeitstempeln in der Ausgabedatei führen. russell vor 6 Jahren 0
@ Mulvya Ich habe gerade eine ffprobe ausprobiert, und es scheint korrupt zu sein. Dies war die Ausgabe: https://pastebin.com/Eja5gmga Ich denke, ich hätte den Befehl möglicherweise falsch für die Videos ohne Ton hinzugefügt. russell vor 6 Jahren 0
Nach mehr Tests scheint es, dass dies nur auf einem Mac geschieht und unter Windows korrekt und synchron ist. Wenn Sie auch auf dem Mac leicht vorwärts springen, ist das Audio wieder synchron. russell vor 6 Jahren 0

0 Antworten auf die Frage