FFmpeg 将输出更改为特定像素格式?

R.m*_*nez 6 opencv ffmpeg v4l2 v4l2loopback

我正在开发一个 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
Run Code Online (Sandbox Code Playgroud)

而且我可以使用 VLC(在 /dev/video0 上)查看该提要没问题,但是当我将其提供给我的 openCV 应用程序时,出现以下错误:

VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
Run Code Online (Sandbox Code Playgroud)

当我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             : 
Run Code Online (Sandbox Code Playgroud)

非功能性输出

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             : 
Run Code Online (Sandbox Code Playgroud)

所以我得出的结论是,像素格式“YU12”与 openCV 不兼容,而格式“UYVY”则兼容。如果可能,当输入为 YU12 时,如何将 FFmpeg 的输出设置为像素格式 UYVY?

小智 15

使用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
Run Code Online (Sandbox Code Playgroud)

[奖励]有很多像素格式可用于获取运行列表ffmpeg -pix_fmts

  • 您可以使用 `ffmpeg -pix_fmts` 查看像素格式列表。 (4认同)