[OT] Nagrywanie z kamerki internetowej

Łukasz Maśko masko w ipipan.waw.pl
Pon, 24 Lis 2008, 22:17:39 CET


Kupiłem sobie dzisiaj za 5zł (PIĘĆ ZŁOTYCH!) kamerkę internetową. Działa mi 
z PLD (trzeba było trochę poprawić kompilację kernela). Rzecz w tym, że 
działa z mplayerem, nie działa natomiast np. z xawtv (mam czarny ekran). 
Ale to małe piwo, na razie się tym nie przejmuję.

Chciałbym sobie teraz np. zgrać obraz z kamery na plik (potem będzie 
strumień, ale to potem). No i nie mogę, bo mencoder (zakładam, że skoro 
mplayer działa, to i on powinien) wywala mi takie coś:

$ mencoder tv:// -tv 
driver=v4l2:width=320:height=240:device=/dev/video0 -ovc raw -o cam.avi
MEncoder 1.0rc2-on2-4.3.2 (C) 2000-2007 MPlayer Team
CPU: Intel(R) Pentium(R) M processor 1.60GHz (Family: 6, Model: 13, 
Stepping: 6)
CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
115 audio & 237 video codecs
success: format: 9  data: 0x0 - 0x0
TV file format detected.
Selected driver: v4l2
 name: Video 4 Linux 2 input
 author: Martin Olschewski <olschewski w zpr.uni-koeln.de>
 comment: first try, more to come ;-)
Selected device: PC Camera
 Capabilites:  video capture  read/write  streaming
 supported norms:
 inputs: 0 = zc3xx;
 Current input: 0
 Current format: unknown (0x4745504a)
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!
Audio block size too low, setting to 16384!
Błąd w obliczeniach zmiennoprzecinkowych

Jeśli podam driver=v4l to błędu nie ma, ale oczywiście obraz jest 
skaszaniony. Transcode dla odmiany wysypuje się tak:

$ transcode -x v4l2,null -i /dev/video0 -y ffmpeg -o tvrecord.avi
transcode v1.0.6 (C) 2001-2003 Thomas Oestreich, 2003-2004 T. Bitterberg, 
2004-2008 Transcode Team
[transcode] (probe) suggested AV correction -D 0 (0 ms) | AV 0 ms | 0 ms
[transcode] auto-probing source /dev/video0 (ok)
[transcode] V: import format    | unknown  (V=v4l2|A=null)
[transcode] V: import frame     | 352x288  1.22:1
[transcode] V: bits/pixel       | 0.710
[transcode] V: decoding fps,frc | 25.000,3
[transcode] V: Y'CbCr           | YV12/I420
[transcode] A: import format    | 0x1     PCM          [44100,16,2]
[transcode] A: export format    | 0x55    MPEG layer-3 [44100,16,2]  128 
kbps
[transcode] V: encoding fps,frc | 25.000,3
[transcode] A: bytes per frame  | 7056 (7056.000000)
[transcode] A: adjustment       | 0 w 1000
[transcode] V: IA32/AMD64 accel | sse2 (sse2 sse mmxext mmx asm C)
[transcode] V: IA32/AMD64 accel | using sse memcpy
[transcode] V: video buffer     | 10 @ 352x288
[import_null.so] v0.2.0 (2002-01-19) (video) null | (audio) null
[import_v4l2.so] v1.3.5 (2005-03-11) (video) v4l2 | (audio) pcm
[export_ffmpeg.so] v0.3.16 (2007-10-27) (video) Lavc52.1.0 | (audio) 
MPEG/AC3/PCM
[import_v4l2.so]: v4l2 video grabbing
[import_v4l2.so]: resync disabled
[import_v4l2.so]: video grabbing, driver = zc3xx, card = PC Camera
[import_v4l2.so]: Pixel format conversion: YVU420 [planar] -> YUV420 
[planar] (no conversion)
[import_v4l2.so]: unknown TV std, defaulting to 50 Hz field rate
[import_v4l2.so]: checking colour & framerate standards:
[import_v4l2.so]: receiving 25 frames / sec
[import_v4l2.so]: driver does not support cropping (ioctl(VIDIOC_CROPCAP) 
returns "Invalid argument"), disabled
[import_v4l2.so]: 16 buffers available
[import_v4l2.so]: VIDIOC_S_CTRL: Invalid argument
[import_v4l2.so]: VIDIOC_STREAMON: Invalid argument
video import module error: OPEN failed
[transcode] critical: failed to open input source

No i jeszcze ffmpeg:

$ ffmpeg -f video4linux2 -i /dev/video0 out.avi
FFmpeg version SVN-r15674, Copyright (c) 2000-2008 Fabrice Bellard, et al.
  
configuration: --arch=i386 --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/share/man --cc=i686-pld-linux-gcc --extra-cflags=-D_GNU_SOURCE=1 -D_FORTIFY_SOURCE=2  -O2 -fno-strict-aliasing -fwrapv -march=i686 -mtune=pentium4 -fno-strict-aliasing -fomit-frame-pointer -mmmx -gdwarf-2 -g2  -I/usr/include/libavcodec -I/usr/include/libswscale --extra-ldflags=-Wl,--as-needed -Wl,-z,relro -Wl,-z,-combreloc  --disable-debug --disable-optimizations --disable-stripping --enable-gpl --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libdc1394 --enable-libdirac --enable-libgsm --enable-libmp3lame --enable-libschroedinger --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-postproc --enable-pthreads --enable-shared --enable-swscale
  libavutil     49.12. 0 / 49.12. 0
  libavcodec    52. 1. 0 / 52. 1. 0
  libavformat   52.23. 1 / 52.23. 1
  libavdevice   52. 1. 0 / 52. 1. 0
  libswscale     0. 6. 1 /  0. 6. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Nov 24 2008 01:16:52, gcc: 4.3.2 20081114 (release)
[video4linux2 @ 0x8074f60]Wrong size (0x0)
/dev/video0: Error while opening file


Jedyne co mogę zrobić to użyć mplayera z opcją -vo yuv4mpeg, ale to generuje 
bodajże surowe pliki, bardzo duże w każdym razie. Jak jeszcze inaczej można 
sobie z tym problemem poradzić?
-- 
Łukasz Maśko                                           GG:   2441498    _o)
Lukasz.Masko(at)ipipan.waw.pl                                           /\\
Registered Linux User #61028                                           _\_V
Ubuntu: staroafrykańskie słowo oznaczające "Nie umiem zainstalować Debiana"


Więcej informacji o liście dyskusyjnej pld-users-pl