当输入是实时摄像头设备时,使用输入帧率选项(在FFmpeg中)使用时,预期的行为是什么?

据我所知, Framerate 选项的使用应仅在输入文件(如图像序列或可能没有定义的PTS的视频文件)上使用。

但是,如果我在网络摄像头上运行以下命令,则视频仍然可以正常播放(至少从我到目前为止检查的几个小时开始)。为什么仍然有效?我应该期望出现问题吗? (也许是在流式传输几个小时或几天后)

ffmpeg -framerate 30 -f v4l2 -copyts -i /dev/video0 -c:v libx264 -r 30 -f mpegts udp://192.168.10.199:1234

编辑:

运行更多测试后,似乎当我运行这样的命令时,几个小时后蒸汽就卡住了:

ffmpeg -framerate 30 -f v4l2 -copyts -i /dev/video0 -c:v libx264 -r 30 -f mpegts udp://192.168.10.199:1234

但是,如果我运行这样的命令,它将运行几天:

ffmpeg -r 30 -f v4l2 -copyts -i /dev/video0 -c:v libx264 -r 30 -f mpegts udp://192.168.10.199:1234

但是我不明白为什么...

wanghuialex163 回答:当输入是实时摄像头设备时,使用输入帧率选项(在FFmpeg中)使用时,预期的行为是什么?

framerate选项使您的相机流以固定的采样率(此处为30 fps)重新采样。这将不可避免地导致帧加倍和/或丢失,甚至抖动。不要在这里使用此选项。

,

某些相机支持多种帧速率,-framerate允许您选择所需的帧速率。您可以使用v4l2-ctl列出此类信息:

$ v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
    Type: Video Capture

    [0]: 'YUYV' (YUYV 4:2:2)
            Size: Discrete 640x480
                    Interval: Discrete 0.033s (30.000 fps)
                    Interval: Discrete 0.067s (15.000 fps)
                    Interval: Discrete 0.100s (10.000 fps)
                    Interval: Discrete 0.200s (5.000 fps)
            Size: Discrete 352x288
                    Interval: Discrete 0.033s (30.000 fps)
                    Interval: Discrete 0.067s (15.000 fps)
                    Interval: Discrete 0.100s (10.000 fps)
                    Interval: Discrete 0.200s (5.000 fps)

如果您选择无效的帧频,则会收到一条消息:

[video4linux2,v4l2 @ 0x556d45e42180] The driver changed the time per frame from 1/12 to 1/10

因此(至少在使用4vl2时)可能发生的最糟糕的情况是,您的相机只是使用了不同但仍受支持的帧速率。

有关更多信息和其他选项,请参见FFmpeg v4l2 input device documentation

本文链接:https://www.f2er.com/2956834.html

大家都在问