Audio ffmpeg concat丢弃音频帧
我有一个mp4文件,我想取出视频的两个连续部分,将它们作为单独的文件渲染,然后将它们重新组合回原始视频。例如,使用我的videoAudio ffmpeg concat丢弃音频帧,audio,video,ffmpeg,mp4,concat,Audio,Video,Ffmpeg,Mp4,Concat,我有一个mp4文件,我想取出视频的两个连续部分,将它们作为单独的文件渲染,然后将它们重新组合回原始视频。例如,使用我的videovideo.mp4,我可以运行 ffmpeg -i video.mp4 -ss 56 -t 4 out1.mp4 ffmpeg -i video.mp4 -ss 60 -t 4 out2.mp4 创建out1.mp4,其中包含video.mp4的00:00:56到00:01:00,以及out2.mp4,其中包含00:01:00到00:01:04。但是,稍后我希望能够快
video.mp4
,我可以运行
ffmpeg -i video.mp4 -ss 56 -t 4 out1.mp4
ffmpeg -i video.mp4 -ss 60 -t 4 out2.mp4
创建out1.mp4
,其中包含video.mp4
的00:00:56到00:01:00,以及out2.mp4
,其中包含00:01:00到00:01:04。但是,稍后我希望能够快速地重新组合它们(即,无需重新编码),因此我使用
其中files.txt
包含
file out1.mp4
file out2.mp4
从理论上讲,这应该会让我返回到video.mp4的00:00:56到00:01:04,但是在发生连接的地方总是会有音频帧丢失,这会产生非常不愉快的声音伪影,音频光点,如果你愿意的话
我曾尝试在最初创建视频的两个部分时使用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
对不起,我用的是-c副本。。我编辑了这个。但是你的解决方案有效!你能解释一下原因或者提供更多细节的信息来源吗。我的假设是,最初我将音频编码为AAC,压缩可能会在边界处产生明显的(连接时)效果。这是否正确?基于DCT的音频编解码器(如MP3、AAC)依赖于相邻的音频帧进行解码。在流的开始处,有一个启动帧用于此目的。它有一个负的时间戳,所以在concat期间,它的TS与前面文件的最终数据包冲突,并且它被concat丢弃。PCM是独立的解码设备,所以不会出现这种情况。@Gyan MP4容器不支持任何“基于DCT的”编解码器,所以我们不需要为此更改容器?
ffmpeg -f concat -safe 0 -i files.txt -c:v copy concat.mp4