如何阻止 ffmpeg 录制比指定更快的帧速率?

如何阻止 ffmpeg 录制比指定更快的帧速率?

我正在尝试使用 ffmpeg 录制延时视频。我的输入设置如下:

ffmpeg -y -f v4l2 -input_format yuyv422 -framerate 0.333

我尝试在 mp4 文件中创建 x264 和 x265 输出。

但是当录音开始时,我收到此消息:

The driver changed the time per frame from 1000/333 to 1/5

这会导致帧速率加快15次我要求的!5fps 是设备发送的实际帧速率,但我认为我可以让 ffmpeg 基本上以较慢的帧速率录制这个答案,那么为什么它不起作用呢?

不管怎样,我尝试以未压缩的形式(yuyv422)录制,然后直接将其压缩为最终输出格式以获得最高质量,而且我不想插入任何额外的步骤,例如“以更高的帧速率录制然后稍后进行采样”。

答案1

当输入是设备时,似乎不能使用输入帧速率来创建延时。相反,必须在输出上丢弃帧。我创建了一个输出过滤器:

-vf select="not(mod(n\,15))",settb=\(1/30\),setpts=N/TB/30 -r 30

所以我的完整命令看起来像这样:

ffmpeg -y -f v4l2 -input_format yuyv422 -i /dev/video5 -vf select="not(mod(n\,15))",settb=\(1/30\),setpts=N/TB/30 -r 30 ...

相关内容