FFmpeg 使用 concat 时丢弃第二个输入文件的帧

FFmpeg 使用 concat 时丢弃第二个输入文件的帧

我目前正在尝试将一个视频文件分割成几部分,然后对其进行编码,然后再将它们拼接起来。作为测试,我试图将一个视频分割成两部分,然后将它们拼接起来。

这是我为第一个视频片段使用的代码……
ffmpeg -i Video.mp4 -codec copy -frames:v 660 -an Output1.mp4
别介意 660 帧和没有音频。660 只是为了更容易判断文件是否正确拼接在一起。这部分不是问题。

这是第二部分的代码...
ffmpeg -i Video -filter_complex:v "select=gte(n\, 660) [tmp]; [tmp] setpts=PTS-STARTPTS" -an -frames:v 2000 Output2.mp4
同样,这里的帧数和无音频无关紧要。setpts 过滤器是为了使单个视频文件不会停留约 20 秒来等待第一帧的时间戳出现。我也尝试过不使用 setpts 过滤器,除了在帧开始之前有非常长的暂停之外,它工作正常。这部分也不是问题……我不认为

最后,这是我尝试将文件重新连接在一起时的代码……
ffmpeg -f concat -i list.txt Output3.mp4
这是 list.txt 文件……
file 'Output1.mp4' file 'Output2.mp4'
在 ffmpeg 尝试将它们连接在一起之前,所有文件都运行良好。第一个文件运行正常,但尝试连接第二个文件时,ffmpeg 会丢失 2000 帧中的近 1900 帧……
frame= .... fps= .... q= .... Lsize= .... time= .... bitrate= .... dup= 0 drop= 1900(1900 帧会有所不同,但始终在该数量左右)
此外,无论我对连接代码或第二个视频文件做什么,Output3.mp4 视频文件始终为 29 秒。

请帮忙我在网上找不到任何解决方案,而且这方面的文档极其有限。此外,如果有人能准确解释视频文件分割过程中发生了什么,特别是第二个视频文件,那就太好了。如果有人知道可以执行这些任务或至少视频分割部分的软件,我也会接受任何其他软件建议。非常感谢。

相关内容