TV hang rögzítése mencoderrel Mic/Line-In-ről

 ( csearo | 2006. december 19., kedd - 22:21 )

Adott a

mencoder tv://S34 -tv noaudio:input=0:driver=v4l2:device=/dev/video0:width=640:height=480:norm=PAL \
 -ofps 25 -oac mp3lame -lameopts cbr:br=128 -ovc lavc -lavcopts vbitrate=1500 -vf lavcdeint -o tv.avi

parancs, ami rögzíti ugyan a képet, de szeretném úgy átkovácsolni, hogy a TV-műsor hangját is rögzítse a Mic/Line-In bemenetről. Ha elhagyom a noaudio-t, vagy netán forceaudio-t írok be, akkor nem rögzít egyetlen frame-et sem, viszont szép lassan betelik a memória... Ugyanez a helyzet, ha alsa-t adok meg a -tv alopciójának.

Vat tu dú?
1.0rc1-3.4.6 verziójú mencoderem van, ezen a gépen fordítottam le. A tunerkártya MSI VOX USB2. Csak digitális képet ad, a hang egy külön kábelen érkezik a hangkártyába.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Én így szoktam felvenni tv tunerről például:

mencoder -idx -srate 48000 -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd -lavcopts acodec=mp2:abitrate=224:vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=4000:keyint=25:aspect=4/3 tv:// -tv driver=v4l2:device=/dev/video0:freq=191.25 -vf pp=hb/vb/dr/al/lb,scale=720:576 -o tv.mpeg

A hang nálam is a Line In -re jön be a tunerről, és emlékszem, elég sokat vacakoltam a mixerrel, míg sikerült a Capture -t oda kapcsolni, ahova kell egy SB Live 5.1 -n, még kezdő koromban.

Valami hasonló volt a megfejtés nálam:

amixer --help
amixer controls
amixer cget numid=68
numid=68,iface=MIXER,name='Capture Source'
; type=ENUMERATED,access=rw---,values=2,items=8
; Item #0 'Mic'
; Item #1 'CD'
; Item #2 'Video'
; Item #3 'Aux'
; Item #4 'Line'
; Item #5 'Mix'
; Item #6 'Mix Mono'
; Item #7 'Phone'
: values=0,0

amixer cset numid=68 4
stb...

Vagy próbálkozni alsamixerrel, vagy kmixszel, talán ez utóbbi a legegyszerűbben kezelhető.

Sajnos az általad írt parancs hatására sem rögzített semmit, viszont kezdett megtelni a memória valamivel. Csak `killall mencoder` segített.

Megnéztem az amixer-t, ami hasonló volt nálam az a
numid=11,iface=MIXER,name='Input Source'
numid=12,iface=MIXER,name='Input Source',index=1
De ezek be vannak kapcsolva szépen:
numid=11,iface=MIXER,name='Input Source'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'Mic'
; Item #1 'CD'
: values=0
illetve
numid=12,iface=MIXER,name='Input Source',index=1
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'Mic'
; Item #1 'CD'
: values=0

A felvételi hangerők is rendben vannak, a kmix szerint is. A HW is oké, mert pl. skype-nál megy a mikrofon. A hangkártyám egyébként valami HDA ATI SB.

Nekem igen régi TvView'99 (asszem használtan csak a kártya került ide doboz minden nélkül az alapján állítottam be ami a kártyára írva volt CPH06X meg TEMIC PAL akármi ;-) és állítólag ez egy ilyen kártya.) tunerkártyám van. hangot a tunerkártya kimenetéből kell az (alaplapi) hangkárya bemenetébe (line-In) vezetni. ez semmi extrát nem tud. csak mono-s. (kicsi a szoba mini hifiben közel van mindkét hangfal, úgyhogy nem számít).

kmix nagyon jó. vagy alsamixer szerintem.

de ha kmix akkor a kapcsolókat állítgasd (bár neked más "hangkártyád" van - az enyém ugye csak alaplapi, de nekem jó.)

MiC Boost +20 Db ki, Video ki, stb. Bemenet legyen (Line In + a Capture)-n engedélyezve, nálam Capture 80%-al szól, de itt a "csak mono" kavar be, ami miatt át kellett "hangolni" ;-).

off: tunerkártyám abszolút érdekessége, hogy Windows XP SP2 alól tudtommal nem működtethető, tehát kizárólag linux compatible. asszem semmilyen NT alapú driver nem készült hozzá. ;-))

Az én egyik minta felvételi szkriptem itt van. (videosrtlc2)

#!/bin/sh

uff=$(date +%D | tr '/' '-')
uff="/home/mencoder/2vb-meccs$uff.avi"
mencoder -quiet -tv driver=v4l2:outfmt=i420:width=704:height=576:chanlist=europe-east:channel=29:alsa:quality=100:decimation=1:amode=0:audiorate=48000 -vc rawi420 -ovc lavc -lavcopts vcodec=mpeg4:vhq:v4mv:vqmax=31:vbitrate=430:aspect=1280/1024:keyint=130 -oac mp3lame -lameopts cbr:br=48 -vf pp=tn/lb,crop=660:540:24:18,scale=640:480 -nobps -endpos 03:40:00 -o $uff tv://
unset uff
exit 0

A dátumot, fájlnevet azért írtam ilyenre, mert voltam olyan barom, és elfelejtettem hogy a régi ott volt, és így sikeresen felülírtam a régit. :)

-----

Nem a zsömle kicsi, a pofátok nagy...

Talán az adevice opció segíthet:
mencoder tv://S34 -tv adevice=/dev/dsp0:input=0 ...
vagy alsa esetén: hw=<kártya>.<eszköz>

Köszi, ezeket mindjárt kipróbálom, csak azt nem tudom, hogy honnét deríthetem ki, hogy a
<kártya>.<eszköz>
az micsoda az ALSA-nál.

hw.0,0
Feltéve ha nem valami "extra" kártyád van és a 0,0 nem tud felvenni (esetleg egyátalán nem tud felvenni, mint néhány ca0106 (SB Audigy) néhány ALSA-verzióval), vagy nem állítottad át (ez kizárt, mert akkor úgyis tudnád hogy mithogyan).

Köszi a tanácsot!
Kipróbáltam ezt:

mencoder tv://S34 -tv adevice=hw.0,0:input=0:driver=v4l2:device=/dev/video0:width=720:height=576:norm=PAL

De akkor azt panaszolta a mencoder, hogy:
Unable to open 'hw.0,0': No such file or directory
Unable to open 'hw.0,0': No such file or directory
Unable to open 'hw.0,0': No such file or directory

Jól alkalmaztam a hw.0,0 opciót? A -tv opció nem ismer 'hw' alopciót, szóval gondoltam, hogy kell az 'adevice=' is eléje.

Ha ALSA eszközt adsz meg, akkor tedd be a -tv paraméterek közé az "alsa"-t is, különben ioctl-lel próbál fileként hozzáférni.

tehát blabla -tv bla:bla=bla:alsa:adevice=hw.0,0:blabla...

Köszi, sajnos még mindig nem oké. Ezúttal root-ként próbáltam:

mencoder tv://S34 -tv alsa:adevice=hw.0,0:input=0:driver=v4l2:device=/dev/video0:width=720:height=576:norm=PAL -ofps 25 -oac pcm -ovc lavc -lavcopts vbitrate=1500 -vf lavcdeint -o tv.avi
MEncoder 1.0rc1-3.4.6 (C) 2000-2006 MPlayer Team
CPU: AMD Turion(tm) 64 Mobile Technology ML-32 (Family: 15, Model: 36, Stepping: 2)
CPUflags: Type: 15 MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 1
Compiled for x86 CPU with extensions: MMX MMX2 3DNow 3DNowEx SSE SSE2

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 ;-)
Selected device: MSI VOX USB 2.0
 Tuner cap:
 Tuner rxs:
 Capabilites:  video capture  tuner  audio  read/write  streaming
 supported norms: 0 = PAL-BG; 1 = PAL-DK; 2 = PAL-I; 3 = PAL-M;
 inputs: 0 = Television; 1 = Composite1; 2 = S-Video;
 Current input: 0
 Current format: YUYV
v4l2: current audio mode is : MONO
Selected channel: S34 (freq: 407.250)
Channel count not available - reverting to default: 2
Channel count not available - reverting to default: 2
v4l2: ioctl query control failed: Invalid argument
[V] filefmt:9  fourcc:0x32595559  size:720x576  fps:25.00  ftime:=0.0400
==========================================================================
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)
==========================================================================
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
Opening video filter: [lavcdeint]
==========================================================================
Opening video decoder: [raw] RAW Uncompressed Video
VDec: vo config request - 720 x 576 (preferred colorspace: Packed YUY2)
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
VDec: using Packed YUY2 as output csp (no 0)
Movie-Aspect is undefined - no prescaling applied.
SwScaler: reducing / aligning filtersize 1 -> 4
SwScaler: reducing / aligning filtersize 1 -> 4
SwScaler: reducing / aligning filtersize 1 -> 1
SwScaler: reducing / aligning filtersize 9 -> 8

SwScaler: BICUBIC scaler, from yuyv422 to yuv420p using MMX2
SwScaler: using 4-tap MMX scaler for horizontal luminance scaling
SwScaler: using 4-tap MMX scaler for horizontal chrominance scaling
SwScaler: using 1-tap MMX "scaler" for vertical scaling (YV12 like)
SwScaler: 720x576 -> 720x576
videocodec: libavcodec (720x576 fourcc=34504d46 [FMP4])
Selected video codec: [rawyuy2] vfm: raw (RAW YUY2)
==========================================================================
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]
Error reading audio: Input/output error

Error reading audio: Input/output error

video buffer full - dropping frame

video buffer full - dropping frame

video buffer full - dropping frame

Élég sokáig várt az első "Error reading audio..." kírása előtt, közben telt a memória folyamatosan. Aztán kezdte el ontani a "video buffer full" üziket. Aztán meg lelőttem. A tv.avi mérete 0. Rémálom...

Milyen hangkártyád van?
Az ALSA néhánnyal nem tud felvenni (feljebb írtam, ca0106 chipes Creative-ok).
Lehet a tiéd is ilyen.
Nézz utána commercial OSS drivernek (vagy használd az integrált AC97 bemenetét, +-1 hangkártya sok vizet nem zavar, de működik általában)!

edit: néhány BT878 kártyának saját szoftveresen használható hangkimenete is (magának a chipnek mindig van, csak a legtöbb gyártó bszik bekötni). Próbáld ki ezt is! (snd-bt878 modul)

"HDA ATI SB" -- Ezt írja ki az összes hangkezelő progi a hangkártyámra.
lspci szerint:
00:14.2 1002:437b Audio device: ATI Technologies Inc SB450 HDA Audio (rev 01)

gugli szerint másoknak is volt ezzel problémájuk, asszem megpróbálom valami új ALSA-val ezt az egészet.
Azt már végképp nem értem, hogy a skype meg hogy a fenébe tudja venni a mikrofont, ha semmi más nem tud fölvenni róla. (Próbáltam KRec-et meg Gnome-os fölvevőt, és egyik se meg se nyikkant.)

Bocs, de nem értem az AC97 bemenettel kapcsolatos mondatot. Hogy kell ezt használni? +1 hangkártya? Laptop, szal nem fér bele több. :)

Sajnos nem BT878-as a tuner, hanem Empia em28xx.

Mindenesetre köszi a tippeket!

Uppsz, valaki (pl skype) nem tartja nyitva a /dev/dsp-t. Nem tudom megcsinálták -e már az ALSA-s skype-t. Addig meg OSS emuval megy, és hacsak a HW nem tud valami csodát, akkor egyszerre csak egy cucc tud belőle felvenni.

Van ALSA-s skype, de 120%-ra terheli a procit, míg OSS-re visszaállítva normális => semmi változás.

Tehát a

mencoder tv://S34 -tv adevice=/dev/dsp:input=0:driver=v4l2:device=/dev/video0:width=720:height=576:norm=PAL -ofps 25 -oac mp3lame -lameopts cbr:br=128 -ovc lavc -lavcopts vbitrate=1500 -vf lavcdeint -o tv.avi

meghívásnál továbbra is csak telik a memória, és nem ír a tv.avi-ba a (gondolom) fejlécen kívül semmit.

Az output utolsó két sora ez:

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]

Normálisan az utolsó sorba folyamatosan írnia kellene az aktuális értékeket, de nálam ez a sor állandóan ugyanaz.

Érdekes még az outputban a

Audio block size too low, setting to 8192!

sor, nem tudom, hogy ez mi, és mit lehet ellene tenni.

/dev/dsp0 device fájlom nincs, csak /dev/dsp van. Az audio csoport tagjai hozzáférhetnek ehhez a fájlhoz olvassásra,
és én tagja vagyok az audio csoportnak.

Nos, számomra jó hír:
az ALSA forrásból való újratelepítése megoldotta a tunerről való filmfelvételkor a hangrögzítést.
http://www.alsa-project.org/

És amivel most műxik:

mencoder tv://S34 -tv input=0:driver=v4l2:device=/dev/video0:width=720:height=576:norm=PAL\
 -ofps 25 -oac mp3lame -lameopts cbr:br=128 -ovc lavc -lavcopts vbitrate=1500 -vf\
 lavcdeint,scale=720:576 -o tv.avi

Mindenkinek köszi a konstruktív javaslatokat!

Kéne ehez írni valami grafikus gui-t ha már minden máshoz van, ehez miért ne lehetne van vagy 30-rippelő, ami mencoderre valami script nyelv jó lenne ide is szerintem az sem baj ha nem mutatja a képet, bár én felvételre az xdtv-t használom, cask a kénylem miatt mert ott egy R-betű az egész felvétel/leállítás ........

AFAIK az AviDemux tud v4l-ről felvenni, grafikus, és scriptelhető (EDL).
És látod, te is az xdtv-t használod, tehát létezik ilyen rippelő.
A MEncoder fő előnye hogy beírod a crontabba aztán megy, mindenféle beavatkozás nélkül. Erre fölösleges GUI (meg mint írtam feljebb, van másik).

van csak nem tom hol ...