Hier an ganz einfaches Beispiel:
Habe das Video verwendet:
https://www.youtube.com/watch?v=ybPtPFAww_A
umbenannt zu talking.mp4 und dann folgenden Befehl für rawvideo abgesetzt:
Code
for i in talking.mp4 talking.mp4 talking.mp4 talking.mp4; do ffmpeg -i $i -pix_fmt yuv420p -r 25 -af apad -shortest -c:v rawvideo -c:a pcm_s16le -ar 44100 -ac 2 -threads 2 -f avi -; done | ffmpeg -thread_queue_size 256 -i pipe: -c:v libx264 -c:a aac test.mp4
Am Ende siehst du schon dass es nicht mehr sync ist. Hingegen mit:
Code
for i in talking.mp4 talking.mp4 talking.mp4 talking.mp4; do ffmpeg -i $i -pix_fmt yuv420p -r 25 -af apad -shortest -c:v mpeg2video -b:v 50000k -minrate 50000k -maxrate 50000k -intra -c:a mp2 -ar 44100 -ac 2 -threads 2 -f mpegts -; done | ffmpeg -thread_queue_size 256 -i pipe: -c:v libx264 -c:a aac test-sync.mp4
bleibt es sync.
Normalerweise würde ich dazwischen noch einen Buffer setzten, aber so geht es zu Not auch.
Edit:
ich glaube du hast doch recht, apad funktioniert nur wenn Audio kürzer ist, aber nicht wenn Audio länger ist. Werde mal noch weiter testen ob es wirklich das ist und was ich dagegen tun kann, vielleicht reicht ein -shortest wirklich schon. Habe das immer nur in Kombination mit apad verwendet.