我想使用 ffmpeg 编码一段 30 分钟的视频。我可以使用以下方法实现此目的
ffmpeg -i in.mp4 -vcodec libvpx -vb 1024k -keyint_min 150 -g 150 -an out.webm
但我想以不同的速率对视频的不同片段进行编码,而不是使用恒定的 1024k 速率。这可能吗?
我知道他们什么时候必须切换编码。例如,假设 5 分钟的视频我想要 1024k 的编码率,而接下来的 5 分钟我可以使用 250k 比特率。我不想使用 VBR,也不想剪切视频并以不同的速率对其进行编码,然后将它们合并。
这可能吗?我读了 ffmpeg 的手册页,发现有以下选项
startime and time
但我不确定如果这是可能的我究竟该如何做到这一点。
答案1
但我想以不同的速率对视频的不同片段进行编码,而不是使用恒定的 1024k 速率。这可能吗?
不。这根本不是一个非常典型的用例。要么你想要恒定比特率(例如在流式传输时),要么你想要可变比特率(恒定质量)。在后一种情况下,编码器将选择适当的比特率以匹配您的质量设置,或者它将使用您提供的量化参数。请参阅这个文件用于 libvpx 支持的编码模式。
我不想使用 VBR,或者我不想剪切视频并以不同的速率对其进行编码,然后将它们合并。
这可能是唯一的方法。您必须找到一种方法来导出原始 VP8 视频比特流(可以使用ffmpeg … -f rawvideo out.webm
),将它们连接在一起,然后将它们再次包装在 WebM 容器中。不过,我还没有找到可行的解决方案。
或者您可以修改 libvpx 编码器的源代码,使其接受每次更改恒定比特率。
我阅读了 ffmpeg 的手册页,发现里面有选项
startime and time
……
FFmpeg 中没有这样的选项。有一个-ss
选项可以更改编码过程的开始时间,还有一个-t
选项可以指定您希望 FFmpeg 编码多长时间。但这些只对剪切视频有用。