Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Audio ffmpeg concat丢弃音频帧_Audio_Video_Ffmpeg_Mp4_Concat - Fatal编程技术网

Audio ffmpeg concat丢弃音频帧

Audio 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。但是,稍后我希望能够快

我有一个mp4文件,我想取出视频的两个连续部分,将它们作为单独的文件渲染,然后将它们重新组合回原始视频。例如,使用我的video
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