ffmpeg открыть веб-камеру, используя YUYV, но я хочу MJPEG

29604
pavelkolodin

Мне нужно, чтобы ffmpeg открывал веб-камеру (logitech c910) в режиме MJPEG, потому что веб-камера может выдавать ~ 24 при использовании «протокола» MJPEG и только ~ 10 кадров в секунду при использовании YUYV. Могу ли я выбирать между ними с помощью командной строки ffmpeg?

xx@(none) ~ $ v4l2-ctl --list-formats ioctl: VIDIOC_ENUM_FMT Index : 0 Type : Video Capture Pixel Format: 'YUYV' Name : YUV 4:2:2 (YUYV)  Index : 1 Type : Video Capture Pixel Format: 'MJPG' (compressed) Name : MJPEG 

Моя текущая командная строка:

ffmpeg -y -f alsa -i hw:3,0 -f video4linux2 -r 20 -s 1280x720 -i /dev/video0 -acodec libfaac -ab 128k -vcodec libx264 /tmp/web.avi 

ffmpeg выдает поврежденный поток h264 при записи с веб-камеры, но обычный поток h264 при записи с x11grab. Еще один кодек (mjpeg, mpeg4) хорошо работает с веб-камерой ... Но это уже другая история.

Обновите полный вывод консоли ffmpeg: http://pastebin.com/Hzem6CKF (вы можете видеть, что он открывает видеоустройство в режиме YUV, но устройство также может обеспечивать вывод MJPEG).

13

2 ответа на вопрос

12
LordNeckbeard

Вы можете перечислить дополнительную информацию о том, что может выводить ваша веб-камера v4l2-ctl --list-formats-ext. Вы также можете отобразить информацию о веб-камере с помощью ffmpeg, используя параметр -list_formatsввода:

$ ffmpeg -f video4linux2 -list_formats all -i /dev/video0 [...] [video4linux2,v4l2 @ 0x1fb7660] Raw : yuyv422 : YUV 4:2:2 (YUYV) : 640x480 160x120 176x144 320x176 320x240 352x288 432x240 544x288 640x360 [video4linux2,v4l2 @ 0x1fb7660] Compressed: mjpeg : MJPEG : 640x480 160x120 176x144 320x176 320x240 352x288 432x240 544x288 640x360 

Эта веб-камера из моего примера может поддерживать как raw ( yuyv422), так и сжатые ( mjpeg) форматы, и вы можете указать, ffmpegкакой вам нужен, с помощью -input_formatопции ввода.

Примеры

Потоковое копирование видеопотока MJPEG (без перекодирования):

ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -c:v copy output.mkv 

Перекодируйте необработанное видео с веб-камеры в H.264:

ffmpeg -f v4l2 -input_format yuyv422 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4 

То же, что и выше, но вручную выберите частоту кадров и размер видео ( v4l2-ctl --list-formats-extдля доступной частоты кадров и размеров видео):

ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -video_size 640x480 -i /dev/video0 -c:v libx264 -vf format=yuv420p output.mp4 
  • Обратитесь к документации устройства ввода video4linux2 за дополнительными опциями.

  • Если выводимая частота кадров ниже ожидаемой, добавьте больше света: веб-камера может снижать частоту кадров, чтобы получить более длительные выдержки в условиях недостаточной освещенности.

0
somewood
ffmpeg -t 60 -f video4linux2 -input_format mjpeg -i /dev/video0 -c:v libx264 -strict -2 /DataVolume/share/Public/v/outputs.mp4 
Добро пожаловать в Супер пользователя! Можете ли вы расширить это? В частности, какую информацию он имеет, чего нет у Лорда Некберда? :) bertieb 6 лет назад 4
Нет необходимости в `-strict -2`, если: 1) ваш` ffmpeg` ужасно не устарел, и 2) вы кодируете аудио AAC. LordNeckbeard 6 лет назад 0

Похожие вопросы