【发布时间】:2016-05-26 18:16:09
【问题描述】:
使用 ffmpeg concat 连接多个文件似乎会导致音频的时间戳或偏移量不匹配。我尝试了几个视频,发现 h.264 / MP4 存在同样的问题。
使用concat 和编码视频似乎工作正常。当 ffmpeg 进行完整的转换计算时,音频保持同步,并且似乎一切正常。
但是,简单地连接视频而不进行任何转换或编码会导致同步问题缓慢增加。显然,编码视频而不是简单地加入它们会导致信息/质量损失,所以我宁愿找到解决这个问题的方法。
我已经tried several flags 解决了这个似乎基于时间戳的问题。不过,这些似乎都不能解决问题。
ffmpeg -f concat -fflags +genpts -async 1 -i segments.txt test.mov
ffmpeg -auto_convert 1 -f concat -fflags +genpts -async 1 -i segments.txt -c copy test2.mov
ffmpeg -f concat -i segments.txt -c copy -fflags +genpts test3.mp4
ffmpeg -f concat -fflags +genpts -async 1 -i segments.txt -copyts test4.mov
ffmpeg -f concat -i segments.txt -copyts test5.mov
ffmpeg -f concat -i segments.txt -copyts -c copy test6.mov
ffmpeg -f concat -fflags +genpts -i segments.txt -copyts -c copy test7.mov
注意:我可以在 SO 上找到的所有其他问题似乎都通过简单地重新编码视频来“解决”问题。不是一个好的解决方案。
更新
我意识到 concat 不是问题。原始剪辑集的时间戳不匹配。不知何故 concat + encoding 解决了这个问题,但我不想每次都重新编码视频并降低质量。
ffmpeg -y -ss 00:00:02.750 -i input.MOV -c copy -t 00:00:05.880 output.MOV
这导致了以下数据
ffprobe -v quiet -show_entries stream=start_time,duration output.MOV
start_time=-0.247500
duration=6.131125
start_time=-0.257333
duration=6.155333
从那以后,我尝试在不同的地方使用-tom 和-t 以及-af apad -c:v copy,但我仍然未能使持续时间相同。
Here is the full ffprobe output
Here is the original (red) vs the segment (green)
详细的示例文件
我录制了一个示例视频,添加了将其切碎的命令,然后将其连接起来。 http://davidpennington.me/share/audio_sync_test_video.zip
【问题讨论】:
-
音频可能需要重新编码,但不是video。您可以使用
-video_track_timescale更改 MOV/MP4 的视频时基,而无需重新编码。如果您粘贴输入文件的详细信息,那将很有帮助。 -
我觉得可能和这个ffmpeg ticket for mp4/aac有关
-
This comment about keyframes 可能是音频同步问题的一部分。
标签: audio video ffmpeg concatenation