LINUX.ORG.RU

Mencoder, захват с вебки: быстрое видео


1

2

Пытаюсь записать видео командой

mencoder tv:// -tv driver=v4l2:device=/dev/video0:alsa:forceaudio:amode=0:adevice=hw.0,0 -ovc lavc -oac mp3lame -lameopts vbr=3:br=32:mode=3 -af volnorm -o video.avi

Когда подбирал опции, всё норм записывалось. Теперь же при воспроизведении у меня видео воспроизводится в удвоенной скорости, звук в норме. При кодировании такие сообщения:

MEncoder svn r34540 (Ubuntu), built with gcc-4.6 (C) 2000-2012 MPlayer Team
success: format: 9  data: 0x0 - 0x0
TV file format detected.
Selected driver: v4l2
 name: Video 4 Linux 2 input
 author: Martin Olschewski <olschewski@zpr.uni-koeln.de>
 comment: first try, more to come ;-)
v4l2: your device driver does not support VIDIOC_G_STD ioctl, VIDIOC_G_PARM was used instead.
Selected device: USB2.0 Camera
 Capabilities:  video capture  streaming
 supported norms:
 inputs: 0 = Camera 1;
 Current input: 0
 Current format: YUYV
v4l2: ioctl set format failed: Invalid argument
v4l2: ioctl set format failed: Invalid argument
v4l2: ioctl set format failed: Invalid argument
tv.c: norm_from_string(pal): Bogus norm parameter, setting default.
v4l2: ioctl enum norm failed: Invalid argument
Error: Cannot set norm!
Selected input hasn't got a tuner!
v4l2: ioctl set mute failed: Invalid argument
[V] filefmt:9  fourcc:0x32595559  size:640x480  fps:30.000  ftime:=0.0333
==========================================================================
Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 44100 Hz, 2 ch, s16le, 1411.2 kbit/100.00% (ratio: 176400->176400)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
==========================================================================
libavcodec version 53.35.0 (external)
Mismatching header version 53.32.2
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [raw] RAW Uncompressed Video
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
Movie-Aspect is undefined - no prescaling applied.
[swscaler @ 0x7fd2f9389120]using unscaled yuyv422 -> yuv420p special converter
videocodec: libavcodec (640x480 fourcc=34504d46 [FMP4])
Selected video codec: [rawyuy2] vfm: raw (RAW YUY2)
==========================================================================
MP3 audio selected.
Forcing audio preload to 0, max pts correction to 0.
Pos:   0.0s      1f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Pos:   0.3s      8f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

Skipping frame!
Pos:   0.4s     12f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

Skipping frame!
Pos:   0.5s     16f ( 0%) 13.09fps Trem:   0min   0mb  A-V:0.000 [0:0]

Skipping frame!
Pos:   0.6s     20f ( 0%) 13.57fps Trem:   0min   0mb  A-V:0.000 [0:0]

Skipping frame!
Pos:   0.7s     24f ( 0%) 13.82fps Trem:   0min   0mb  A-V:0.000 [0:0]

Skipping frame!
Pos:   0.8s     28f ( 0%) 14.16fps Trem:   0min   0mb  A-V:0.000 [0:0]

Skipping frame!
Pos:   0.9s     33f ( 0%) 14.36fps Trem:   0min   0mb  A-V:0.000 [0:0]

Skipping frame!
Pos:   1.0s     37f ( 0%) 14.49fps Trem:   0min   0mb  A-V:0.000 [0:0]

Skipping frame!
Pos:   1.1s     41f ( 0%) 14.61fps Trem:   0min   0mb  A-V:0.000 [1304:32]

Skipping frame!
^Cs:   1.2s     45f ( 0%) 14.72fps Trem:   0min   0mb  A-V:0.000 [1259:32]

Skipping frame!
Pos:   1.2s     46f ( 0%) 14.78fps Trem:   0min   0mb  A-V:0.000 [1259:32]

Flushing video frames.
Writing index...
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.

Video stream: 1259.467 kbit/s  (157433 B/s)  size: 188920 bytes  1.200 secs  46 frames

Audio stream:   32.715 kbit/s  (4089 B/s)  size: 4914 bytes  1.202 secs
v4l2: ioctl set mute failed: Invalid argument
v4l2: 48 frames successfully processed, 45 frames dropped.

Получается, пропуская кадры, видео записывается в два раза быстрее. Пробовал записывать без звука - тогда идёт нормально. Видимо, проблема в синхронизации, но как бы я не менял значения fps и srate, проблема на месте. Что можно попробовать, чтобы видео проигрывалось в нормальной скорости?

у некоторых вебок выдается 15fps. А видео воспроизводится с 29fps. Предположу что надо указать mencoder-у количество кадров в секунду. На счет опций - курит ман

gnunixon ★★★ ()

У меня та же фигня с этой командой. Советую не использовать mencoder, а кодировать напрямую ffmpeg'ом.

morse ★★★★★ ()
Ответ на: комментарий от gnunixon

Предположу что надо указать mencoder-у количество кадров в секунду

Задавал во входных параметрах:

mencoder tv:// -tv driver=v4l2:device=/dev/video0:alsa:forceaudio:amode=0:adevice=hw.0,0:fps=24 -ovc lavc -oac mp3lame -lameopts vbr=3:br=32:mode=3 -af volnorm -o video.avi

и в выходных:

mencoder tv:// -tv driver=v4l2:device=/dev/video0:alsa:forceaudio:amode=0:adevice=hw.0,0 -ovc lavc -oac mp3lame -lameopts vbr=3:br=32:mode=3 -ofps 24 -af volnorm -o video.avi
вместо ofps пробовал и просто fps.

Самое интересное, работала именно ета команда и ничего после того не устанавливалось и не настраивалось. Почему-то мне думается, косяк в кодеках, недаром же он пишет «Skipping frame!». Кстати, может знаете, как заставить не пропускать фреймы?

Советую не использовать mencoder, а кодировать напрямую ffmpeg'ом.

Я думаю, я потом могу то видео разбить отдельно на видео и аудио, потом склеить заново, но муторно.. А ffmpeg, имеется ввиду, тоже записывать с камеры умеет?

abr_linux ()
Ответ на: комментарий от abr_linux

я не уверен, но кажется он пропускает фреймы если кадры идентичны. В смысле не обязательно же что вы каждые 1/15 секунды что-то делаете.

Странно что штука с fps не сработала. Может старшие товарищи чего подскажут.

gnunixon ★★★ ()
Ответ на: комментарий от gnunixon

Кстати, без звука:

$ mencoder tv:// -tv driver=v4l2:device=/dev/video0 -ovc copy -nosound -o video.avi
MEncoder svn r34540 (Ubuntu), built with gcc-4.6 (C) 2000-2012 MPlayer Team
success: format: 9  data: 0x0 - 0x0
TV file format detected.
Selected driver: v4l2
 name: Video 4 Linux 2 input
 author: Martin Olschewski <olschewski@zpr.uni-koeln.de>
 comment: first try, more to come ;-)
v4l2: your device driver does not support VIDIOC_G_STD ioctl, VIDIOC_G_PARM was used instead.
Selected device: USB2.0 Camera
 Capabilities:  video capture  streaming
 supported norms:
 inputs: 0 = Camera 1;
 Current input: 0
 Current format: YUYV
v4l2: ioctl set format failed: Invalid argument
v4l2: ioctl set format failed: Invalid argument
v4l2: ioctl set format failed: Invalid argument
tv.c: norm_from_string(pal): Bogus norm parameter, setting default.
v4l2: ioctl enum norm failed: Invalid argument
Error: Cannot set norm!
Selected input hasn't got a tuner!
v4l2: ioctl set mute failed: Invalid argument
[V] filefmt:9  fourcc:0x32595559  size:640x480  fps:30.000  ftime:=0.0333
videocodec: framecopy (640x480 24bpp fourcc=32595559)
Forcing audio preload to 0, max pts correction to 0.
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Pos:   0.0s      1f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.0s      2f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.1s      3f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.2s      4f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.2s      5f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

3 duplicate frame(s)!
Pos:   0.3s      6f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.4s      7f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.6s      9f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.6s     10f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.7s     11f ( 0%)  0.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.7s     12f ( 0%) 11.63fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.8s     13f ( 0%) 12.00fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.9s     14f ( 0%) 12.13fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   0.9s     15f ( 0%) 12.33fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
Pos:   1.0s     16f ( 0%) 12.51fps Trem:   0min   0mb  A-V:0.000 [0:0]

1 duplicate frame(s)!
^Cs:   1.1s     17f ( 0%) 12.67fps Trem:   0min   0mb  A-V:0.000 [78336:0]

1 duplicate frame(s)!
Pos:   1.1s     18f ( 0%) 12.78fps Trem:   0min   0mb  A-V:0.000 [78064:0]
Writing index...
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.

Video stream: 73728.000 kbit/s  (9216000 B/s)  size: 11059200 bytes  1.200 secs  18 frames
v4l2: ioctl set mute failed: Invalid argument
v4l2: 20 frames successfully processed, 19 frames dropped.
и воспроизводится нормально. Есть идея в производительности компа, но он вобще ничем не загружен, да и для его характеристик обработка видео вобще фигня

abr_linux ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.