我想用我的网络摄像头录制尽可能好的视频文件(就分辨率/帧速率/色彩而言)。
现在我正在使用以下命令:
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)
无损讨论如下:
- 无损通用视频格式
- https://stackoverflow.com/questions/11713882/lossless-ffmpeg-conversion-encoding
- https://video.stackexchange.com/questions/7903/how-to-losslessly-encode-a-jpg-image-sequence-to-a-video-in-ffmpeg
在 Ubuntu 20.04、联想 ThinkPad P51 上测试。