我有大量的 .mp4 文件,我只想修剪每个文件的前 3 秒。
我尝试使用以下命令:
ffmpeg -i 输入.mp4 -ss 00:00:03 -vcodec 复制 -acodec 复制 输出.mp4
音频剪切效果不错,但看起来好像删除了一些额外的视频,并留下了一点空白,然后拉伸了前几帧来补偿。看起来很糟糕。
我发现这个帖子我认为“慢但准确”的路线是我想要的,但我对“-filter_complex”之后的所有内容都不够熟悉,无法使其适应我更简单的用例。
有人可以告诉我如何使该命令适应我的用例,或者告诉我一个更好的方法,让我可以准确地剪切视频文件,而不必将每个文件都带入 kdenlive 或类似的东西吗?
答案1
复制视频流时,它会在关键帧上进行剪切。为了在准确位置进行剪切,至少需要对关键帧之间的部分进行重新编码。
对于更简单的方法,只需省去-vcodec copy
使用默认质量设置将 ffmpeg 编码为 mp4 视频的部分即可。如果结果看起来不太好,或者转换导致文件太大,则需要指定标志(这些标志特定于您编码的格式,因此请参阅手册)来控制质量,并尝试这些标志,直到视频质量和文件大小令您满意。
不过,如果你能在 3 秒后重新编码第一部分直到下一个关键帧,那就更好了。不过,要实现自动化,需要编写一些更复杂的脚本。这Stackoverflow 答案提示如何重新编码文件的一部分直到关键帧,然后使用 concat demuxer 将重新编码的部分与所选关键帧之后的剩余部分连接起来。这里的困难在于这些关键帧对于每个视频都是不同的,因此脚本需要确定在不同步骤中使用的关键帧(concat demyzer 中的“入点”)。