FFmpeg изменить вывод на определенный формат пикселей?

Я работаю над проектом 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 (on /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" есть. Если это возможно, как мне установить выход FFmpeg в пиксельном формате UYVY, если на входе YU12?

2 ответа

Использовать 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

[Бонус] Есть много форматов пикселей, доступных для запуска списка их ffmpeg -pix_fmts,

ffmpeg -pix_fmts увидит список доступных форматов пикселей

Использовать

-pix_fmt rgb24

например, и вы больше не увидите этого устаревшего предупреждения

Другие вопросы по тегам