ffmpeg concat drop audio frames

ffmpeg concat drop audio frames

问题描述:

我有一个mp4文件,我想将视频的两个连续部分取出并呈现为单个文件,稍后将它们重新组合为原始视频。例如,我的视频video.mp4,我可以运行ffmpeg concat drop audio frames

ffmpeg -i video.mp4 -ss 56 -t 4 out1.mp4 
ffmpeg -i video.mp4 -ss 60 -t 4 out2.mp4 

创建out1.mp4包含○时00分56秒至00:01:00 video.mp4out2.mp4包含00:01:00到00:01: 04。不过,以后我希望能够再重新组合它们快速(即不重新编码),所以我用了concat demuxer

ffmpeg -f concat -safe 0 -i files.txt -c copy concat.mp4 

其中files.txt包含

file out1.mp4 
file out2.mp4 

理论上应该给我返回00:00:56到00:01:04的video.mp4,但是总会有串音出现的音频帧丢失,产生非常令人不快的声音效果,音频blip,如果您愿意的话。

missing audio frames

我已经在最初创建视频的两个部分使用async-af apad尝试,但我仍然面临着同样的问题,并没有找到解决的其他地方。我在多个不同的用例中遇到过这个问题,所以希望这个简单的例子能够揭示真正的问题。

我建议你用PCM音频将段输出到MOV,然后将它们串接起来,但要重新编码音频。

ffmpeg -i video.mp4 -c:a pcm_s16le -ss 56 -t 4 out1.mov 
... 

然后

ffmpeg -f concat -safe 0 -i files.txt -c:v copy concat.mp4 
+0

对不起,我是用-c副本..我编辑以包括。但你的解决方案工作!你能解释为什么或提供任何能提供更多细节的资源。 我的假设是最初我将音频编码为AAC,并且压缩可能在边界处具有显着的(当连接时)效果。这是正确的吗? – Shaun

+0

像MP3,AAC等基于DCT的音频编解码器依靠相邻音频帧进行解码。在流的开始处,有一个起动框架用于此目的。它有一个负面的时间戳,所以在concat期间,它的TS与前一个文件的最终数据包发生冲突,并通过concat丢弃。 PCM是独立的解码器,所以不会受此影响。 – Mulvya