-1

据我所知,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

但我不明白为什么...

4

2 回答 2

0

一些相机支持多种帧速率,并-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 输入设备文档

于 2019-12-09T20:08:52.693 回答
0

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

于 2019-12-09T13:11:36.143 回答