ffmpeg відкрити веб-камеру за допомогою YUYV, але я хочу MJPEG


14

Мені потрібен 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

Ви можете перелічити додаткову інформацію про те, з чим може виходити ваша веб-камера 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

Ця веб-камера з мого прикладу може підтримувати як сирий ( 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
ffmpeg -t 60 -f video4linux2 -input_format mjpeg -i /dev/video0 -c:v libx264 -strict -2 /DataVolume/share/Public/v/outputs.mp4

4
Ласкаво просимо до Супер Користувача! Чи можете ви розширити це? Зокрема, яку інформацію має лордНекбард? :)
bertieb

Не потрібно, -strict -2якщо: 1) ваш ffmpegжахливо застарів, і 2) ви кодуєте аудіо AAC.
логіан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.