技术解析

ffmpeg 推流参数配置中关于输入格式(--input_format)问题
0
2021-06-10 16:39:04
idczone

最近在做一个关于视频推流的项目,使用到 ffmpeg 推流,推流命令如下:

ffmpeg -i /dev/video0 -input_format mjpeg -s:v 1920x1080 -framerate 30 -f flv

但 ffmpeg 完全无视了-input_format mjpeg,仍然使用 YUYV:

Input #0, video4linux2,v4l2, from '/dev/video0':

Duration: N/A, bitrate: 165888 kb/s

Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1920x1080, 165888 kb/s, 5 fps, 5 tbr, 1000k tbn, 1000k tbc

之所以要用 mjpeg 格式,是因为我使用的 USB 摄像头只能在mjpg下使用[email protected]

[email protected]:~ $ v4l2-ctl --list-formats-ext -d /dev/video0 ioctl: VIDIOC_ENUM_FMT Type: Video Capture

[0]: 'MJPG' (Motion-JPEG, compressed)
	Size: Discrete 640x480
		Interval: Discrete 0.033s (30.000 fps)
		Interval: Discrete 0.040s (25.000 fps)
		Interval: Discrete 0.033s (30.000 fps)
		Interval: Discrete 0.040s (25.000 fps)
	Size: Discrete 1920x1080
		Interval: Discrete 0.033s (30.000 fps)
		Interval: Discrete 0.040s (25.000 fps)
	Size: Discrete 1280x960
		Interval: Discrete 0.033s (30.000 fps)
		Interval: Discrete 0.040s (25.000 fps)
	Size: Discrete 1280x720
		Interval: Discrete 0.033s (30.000 fps)
		Interval: Discrete 0.040s (25.000 fps)
	美国服务器Size: Discrete 640x480
		Interval: Discrete 0.033s (30.000 fps)
		Interval: Discrete 0.040s (25.000 fps)
		Interval: Discrete 0.033s (30.000 fps)
		Interval: Discrete 0.040s (25.000 fps)
[1]: 'YUYV' (YUYV 4:2:2)
	Size: Discrete 640x480
		Interval: Discrete 0.033s (30.000 fps)
		Interval: Discrete 0.033s (30.000 fps)
	Size: Discrete 1920x1080
		Interval: Discrete 0.200s (5.000 fps)
	Size: Discrete 1280x960
		Interval: Discrete 0.200s (5.000 fps)
	Size: Discrete 1280x720
		Interval: Discrete 0.200s (5.000 fps)
	Size: Discrete 640x480
		Interval: Discrete 0.033s (30.000 fps)
		Interval: Discrete 0.033s (30.000 fps)

https://ffmpeg.org/ffmpeg-devices.html#Options-18 中提到

input_format: Set the preferred pixel format (for raw video) or a codec name. This option allows one to select the input format, when several are available.

请问如何强制 ffmpeg 使用 mjpg 格式输入呢?


我很确定的是:ffmpeg 对参数顺序是有要求的 https://ffmpeg.org/ffmpeg.html
> As a general rule, options are applied to the next specified file. Therefore, order is important, and you can have the same option on the command line multiple times. Each occurrence is then applied to the next input or output file. Exceptions from this rule are the global options (e.g. verbosity level), which should be specified first.

你需要把能够影响到 -i /dev/video0 的参数们(比如 -input_format mjpeg )放到 -i 的前面

> 只能在 mjpg 下使用 [email&3 个参数都要挪到 -i 前面
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服