使用 FFmpeg 对比特率不断变化的视频进行编码

使用 FFmpeg 对比特率不断变化的视频进行编码

我想使用 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 编码多长时间。但这些只对剪切视频有用。

相关内容