我正在做一个openCV项目,我有一个稳定运行的变体,它从HDMI捕获卡获取输入,并使用FFmpeg输出到v4L2环回设备(/dev/video0(。我的openCV项目从/dev/video0获取输入。
当我尝试使用rtsp提要时,问题来了,下面的命令可以将提要发送到我的环回设备:
ffmpeg -rtsp_transport tcp -i rtsp://@192.168.1.27:552//stream1 -acodec rawvideo -vcodec rawvideo -f v4l2 /dev/video0
我可以用VLC(在/dev/video0上(查看该提要,没有问题,但当我将其馈送到我的openCV应用程序时,我会收到以下错误:
VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
当我在工作和非工作变体上运行v4l2-ctl -d /dev/video0 --all
时,我得到的是:
工作输出
Format Video Output:
Width/Height : 1920/1080
Pixel Format : 'UYVY'
Field : None
Bytes per Line : 3840
Size Image : 4147200
Colorspace : sRGB
Transfer Function : Default
YCbCr Encoding : Default
Quantization : Default
Flags :
无功能输出
Format Video Output:
Width/Height : 1280/720
Pixel Format : 'YU12'
Field : None
Bytes per Line : 1280
Size Image : 1382400
Colorspace : sRGB
Transfer Function : Default
YCbCr Encoding : Default
Quantization : Default
Flags :
因此,我得出的结论是,像素格式"YU12"与openCV不兼容,而格式"UYVY"则兼容。如果可能,当输入为YU12时,我如何将FFmpeg的输出设置为像素格式UYVY?
使用format
过滤器或-pix_fmt
选项。例如,我们将使用yuv420p
像素格式!
# Using the format filter (yuv420p)
ffmpeg -i in_file -filter:v "format=yuv420p" out_file
# Using the 'pix_fmt' option
ffmpeg -i in_file -pix_fmt yuv420p out_file
[Ponus]有很多像素格式可用于获得运行
ffmpeg -pix_fmts
的像素列表。
ffmpeg-pix_fmts
将看到可用像素格式的列表
使用
-pix_fmt rgb24
例如,你再也看不到不推荐使用的警告了