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
например, и вы больше не увидите этого устаревшего предупреждения