我正在尝试使用 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 ...