哪些 ffmpeg 设置可以获得我的网络摄像头所能达到的最佳视频分辨率/帧速率?

哪些 ffmpeg 设置可以获得我的网络摄像头所能达到的最佳视频分辨率/帧速率?

我想用我的网络摄像头录制尽可能好的视频文件(就分辨率/帧速率/色彩而言)。
现在我正在使用以下命令:

ffmpeg -f v4l2 -framerate 25 -video_size 640x480 -i /dev/video0 output.mkv

我的网络摄像头好像支持这个:

$ ffmpeg -f v4l2 -list_formats all -i /dev/video0
[video4linux2,v4l2 @ 0xf07d80] Raw       : yuyv422 : YUV 4:2:2 (YUYV) : 640x480 160x120 176x144 320x176 320x240 352x288 432x240 544x288 640x360
[video4linux2,v4l2 @ 0xf07d80] Compressed:   mjpeg :            MJPEG : 640x480 160x120 176x144 320x176 320x240 352x288 432x240 544x288 640x360

我想我已经找到解决方案了,但是我怎样才能改进我的命令行呢:

  • 不使用压缩(我怀疑当前的 .mkv 输出是压缩的)
  • 使用相机和计算机能够达到的最佳帧速率,并且不重复帧(如果网络摄像头无法以 100 fps 的速率捕获帧,则以 100 fps 保存文件是没有意义的)
  • 欢迎提出任何有关进一步改善视频质量的想法

答案1

我使用的是:ffmpeg -f video4linux2 -input_format yuyv422 -video_size 640x480 -i /dev/video0 -c:v copy 640x480.mkv

答案2

你真的不想压缩吗?未压缩的视频会非常大。或者你不想转码?或者无损?

如上所述,无法实现压缩https://superuser.com/a/1302502/128124

首先确定可用的格式:

v4l2-ctl --list-formats-ext

如上所述:如何列出 Linux 中 USB 网络摄像头可用的视频模式?

对我来说最高的是:

        [0]: 'YUYV' (YUYV 4:2:2)
                Size: Discrete 1280x720
                        Interval: Discrete 0.100s (10.000 fps)
        [1]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.067s (15.000 fps)

您还可以检查:

ffmpeg -f v4l2 -list_formats all -i /dev/video0

其中包含我的设备:

video4linux2,v4l2 @ 0x5579b13df240] Raw       :     yuyv422 :           YUYV 4:2:2 : 640x480 320x180 320x240 352x288 424x240 640x360 848x480 960x540 1280x720
[video4linux2,v4l2 @ 0x5579b13df240] Compressed:       mjpeg :          Motion-JPEG : 640x480 320x180 320x240 352x288 424x240 640x360 848x480 960x540 1280x720

然后,如果我按照所述设置录制两段 3.5 秒的非常相似的做鬼脸视频https://askubuntu.com/questions/348838/how-to-check-available-webcams-from-the-command-line/848390#848390修订 18 如下:

ffmpeg -y -f v4l2 -framerate 30 -video_size 1280x720 -input_format mjpeg -i /dev/video0 -c copy out.mjpeg.mkv
ffmpeg -y -f v4l2 -framerate 30 -video_size 1280x720 -input_format yuyv422 -i /dev/video0 -c copy out.yuyv422.mkv

尺寸大约为:

  • 15MB
  • 60MB

ffprobe分别确认:

    Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 1280x720, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
    Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1280x720, 10 fps, 10 tbr, 1k tbn, 1k tbc (default)

无损讨论如下:

在 Ubuntu 20.04、联想 ThinkPad P51 上测试。

相关内容