我有一个mp4文件,想要将视频中的两个连续片段提取出来并渲染成单独的文件,最后将它们重新组合成原始视频。例如,对于我的视频
创建包含
理论上,这应该会将
video.mp4
,我可以运行:ffmpeg -i video.mp4 -ss 56 -t 4 out1.mp4
ffmpeg -i video.mp4 -ss 60 -t 4 out2.mp4
创建包含
video.mp4
的00:00:56到00:01:00的out1.mp4
,以及包含00:01:00到00:01:04的out2.mp4
。然而,后来我想要能够快速地重新组合它们(即不需要重新编码),因此我使用concat demuxer。ffmpeg -f concat -safe 0 -i files.txt -c copy concat.mp4
其中files.txt
包含
file out1.mp4
file out2.mp4
理论上,这应该会将
video.mp4
的 00:00:56 到 00:01:04 部分还原出来,然而在拼接的位置总是会出现丢失音频帧的情况,产生非常不愉快的声音伪影,如果你愿意,可以称之为音频尖峰。
我曾尝试在视频的两个部分最初创建时使用async
和-af apad
,但仍然面临相同的问题,并未在其他地方找到解决方案。我在多种不同的用例中都遇到了这个问题,因此希望这个简单的示例能揭示真正的问题。