OVH Cloud OVH Cloud

Webcam avec mplayer

16 réponses
Avatar
geo cherchetout
Bonjour,

J'ai une webcam Logitech qui s'utilise avec v4l2 et le module uvcvideo. Elle
possède un microphone incorporé et délivre les signaux audio et vidéo sur la
même prise USB. Avec mplayer, j'obtiens la vidéo en exécutant le commande
suivante, par exemple :

$ mplayer tv:// -tv driver=v4l2:width=320:height=240:device=/dev/video0

Mais c'est du cinéma muet. Dans l'espoir d'avoir aussi le son, j'ai essayé
d'ajouter des options du genre :adevice=xxxx mais le verdict est toujours le
même : Audio: no sound.

Quelle serait la bonne syntaxe pour obtenir le son
- capté par le micro incorporé ?
- capté par le micro branché sur la prise ad hoc de ma carte son ?

Voici deux extraits de la réponse à la commande lshw :

*-usb:1
description: Video
product: QuickCam Pro 5000
vendor: Logitech, Inc.
physical id: 6
bus info: usb@1:6
version: 0.05
serial: 3823F4A1
capabilities: usb-2.00
configuration: driver=snd-usb-audio maxpower=500mA
speed=480.0MB/s


*-pci:0
description: PCI bridge
product: CK804 PCI Bridge
vendor: nVidia Corporation
physical id: 9
bus info: pci@0000:00:09.0
version: a2
width: 32 bits
clock: 66MHz
capabilities: pci subtractive_decode bus_master
resources: ioport:c000(size=4096) memory:d6000000-d7ffffff
*-multimedia
description: Multimedia audio controller
product: 5880B [AudioPCI]
vendor: Ensoniq
physical id: 6
bus info: pci@0000:05:06.0
version: 02
width: 32 bits
clock: 33MHz
capabilities: pm bus_master cap_list
configuration: driver=ENS1371 latency=32 maxlatency=128 mingnt=12
resources: irq:16 ioport:c000(size=64)

6 réponses

1 2
Avatar
Hugolino
Le 17-05-2011, Nicolas George <nicolas$ a écrit :
geo cherchetout , dans le message
<4dd2bba8$0$14682$, a écrit :
> Oui, son impeccable avec cette commande et des variantes :
>
> $ arecord -D default -c 1 -r 16000 -f S16_LE - | aplay -D default -c 1 -r
> 16000 -f S16_LE -

Après vérification, mplayer semble bien ignorer complètement les options
audio. Je vais essayer de regarder ça demain, et voir s'il y a moyen de
réparer.



Tiens donc, me viens l'idée de dumper le flux de ma webcam (dont je ne
me sers absolument jamais).

J'ai essayé "mplayer -v tv:// -tv driver=v4l2:widthd0:heightH0:
device=/dev/video0 -dumpstream"

qui se termine immédiatement avec:
Playing tv://.
Core dumped ;)
vo: x11 uninit called but X11 not initialized..

Exiting... (End of file)


et qui créé un fichier stream.dump de taille nulle...

Comment résoudre ce problème de x11 ?


--
A l'âge de bière, les hommes vivaient dans les tavernes.
Hugo (né il y a 1 485 182 568 secondes)
Avatar
Nicolas George
Hugolino , dans le message
, a écrit :
Comment résoudre ce problème de x11 ?



Le fait que vo x11 soit fermé sans avoir été initialisé ? C'est un petit bug
qu'il faudrait corriger, mais ce n'est pas vraiment un problème, et c'est
assez orthogonal au reste, tu as la même chose si tu lances mplayer sans
argument.
Avatar
geo cherchetout
Le 18/05/2011 15:18, *Nicolas George* a écrit fort à propos :

Avec adevice=hw.1,0 c'est celui du micro de la webcam. Très correct
mais pollué par des « toc » irréguliers toutes les une à trois secondes
environ. Que pourrais-je essayer pour éviter ou au moins espacer ces
bruits parasites ?



Ça ressemble à un dépassement, par le bas ou par le haut, du buffer
d'enregistrement. Une expérience à faire serait de jouer un son
sinusoïdal et de l'enregistrer avec ce micro (avec arecord, pas mplayer),
pour mesurer précisément la différence de fréquence.



Il me faudrait donc connaître avec précision la fréquence du signal original
et savoir mesurer précisément celle du signal restitué ? Comment réaliser
l'expérience avec seulement l'ordinateur et un de ses haut-parleurs ? Je
connais siggen et audacity mais il me semble bien avoir remarqué que les
signaux synthétisés par ces programmes sont eux-mêmes entachés à l'écoute de
« tocs » réguliers.
Avatar
geo cherchetout
Le 18/05/2011 15:18, *Nicolas George* a écrit fort à propos :

Ça ressemble à un dépassement, par le bas ou par le haut, du buffer
d'enregistrement. Une expérience à faire serait de jouer un son sinusoïdal
et de l'enregistrer avec ce micro (avec arecord, pas mplayer), pour mesurer
précisément la différence de fréquence.



Je n'ai pas fait cette expérience mais une autre observation relative au son
et à l'USB. J'ai en effet un petit tuner Terratec qui me permet de regarder
la télévision avec VLC et qui, comme la webcam, se branche sur une prise
USB. En prêtant bien l'oreille, je perçois assez régulièrement toutes les
quelques secondes des ruptures du son, trop brèves pour que je puisse dire
s'il s'agit de brefs silences ou, au contraire de chevauchements. Si je
pouvais me permettre une interprétation, je dirais que les données audio
affluent trop lentement ou trop vite, ce qui pourrait s'expliquer par une
petite différence entre la fréquence d'horloge du tuner et celle de ma carte
son (issue peut-être elle-même d'une horloge de la carte mère ?). Pour mieux
faire, il faudrait que toutes ces horloges soient pilotées par une horloge
commune.
Ma théorie n'est pas trop farfelue ?
Avatar
pwet
On 17/05/2011 17:10, geo cherchetout wrote:
Bonjour,

J'ai une webcam Logitech qui s'utilise avec v4l2 et le module uvcvideo. Elle
possède un microphone incorporé et délivre les signaux audio et vidéo sur la
même prise USB. Avec mplayer, j'obtiens la vidéo en exécutant le commande
suivante, par exemple :

$ mplayer tv:// -tv driver=v4l2:width20:height$0:device=/dev/video0

Mais c'est du cinéma muet. Dans l'espoir d'avoir aussi le son, j'ai essayé
d'ajouter des options du genre :adevice=xxxx mais le verdict est toujours le
même : Audio: no sound.

Quelle serait la bonne syntaxe pour obtenir le son
- capté par le micro incorporé ?
- capté par le micro branché sur la prise ad hoc de ma carte son ?

Voici deux extraits de la réponse à la commande lshw :

*-usb:1
description: Video
product: QuickCam Pro 5000
vendor: Logitech, Inc.
physical id: 6
bus info: :6
version: 0.05
serial: 3823F4A1
capabilities: usb-2.00
configuration: driver=snd-usb-audio maxpowerP0mA
speedH0.0MB/s


*-pci:0
description: PCI bridge
product: CK804 PCI Bridge
vendor: nVidia Corporation
physical id: 9
bus info: :00:09.0
version: a2
width: 32 bits
clock: 66MHz
capabilities: pci subtractive_decode bus_master
resources: ioport:c000() memory:d6000000-d7ffffff
*-multimedia
description: Multimedia audio controller
product: 5880B [AudioPCI]
vendor: Ensoniq
physical id: 6
bus info: :05:06.0
version: 02
width: 32 bits
clock: 33MHz
capabilities: pm bus_master cap_list
configuration: driver=ENS1371 latency2 maxlatency8 mingnt
resources: irq:16 ioport:c000(sized)





labilisé chezmoicamarche

mencoderavec_son='mencoder tv:// -tv
driver=v4l2:width52:height(8:outfmt=yuy2:device=/dev/webcam:forceaudio:alsa:adevice=hw.0
-ovc lavc -oac lavc -lavcopts vbitrate000 -o ~/cam.pwet'

Bien le bonjour à tous
Avatar
geo cherchetout
Le 18/05/2011 15:18, *Nicolas George* a écrit fort à propos :

Ça ressemble à un dépassement, par le bas ou par le haut, du buffer
d'enregistrement. Une expérience à faire serait de jouer un son sinusoïdal
et de l'enregistrer avec ce micro (avec arecord, pas mplayer), pour mesurer
précisément la différence de fréquence.



Je viens de faire l'expérience avec ffmpeg. Une tonalité à 440 Hz, produite
par siggen, est diffusée par une enceinte devant laquelle est placée la webcam :

$ ffmpeg -f alsa -i hw:1,0 -ar 8000 tonehw1.wav
FFmpeg version SVN-r22960, Copyright (c) 2000-2010 the FFmpeg developers
built on May 16 2011 11:07:07 with gcc 4.4.3
configuration: --prefix=/usr --enable-shared --libdir=/usr/lib
--shlibdir=/usr/lib --incdir=/usr/include --disable-stripping
--enable-postproc --enable-gpl --enable-pthreads --enable-libtheora
--enable-libvorbis --disable-encoder=vorbis --enable-x11grab
--enable-runtime-cpudetect --enable-libdc1394 --enable-libschroedinger
--enable-libmp3lame --enable-libfaad --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-version3 --enable-libx264
libavutil 50.14. 0 / 50.14. 0
libavcodec 52.66. 0 / 52.66. 0
libavformat 52.61. 0 / 52.61. 0
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0.10. 0 / 0.10. 0
libpostproc 51. 2. 0 / 51. 2. 0
[alsa @ 0x85dc440]Estimating duration from bitrate, this may be inaccurate
Input #0, alsa, from 'hw:1,0':
Duration: N/A, start: 2338.998561, bitrate: N/A
Stream #0.0: Audio: pcm_s16le, 16000 Hz, 1 channels, s16, 256 kb/s
Output #0, wav, to 'tonehw1.wav':
Metadata:
encoder : Lavf52.61.0
Stream #0.0: Audio: pcm_s16le, 8000 Hz, 1 channels, s16, 128 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Press [q] to stop encoding
size= 684kB timeC.79 bitrate= 128.0kbits/s
video:0kB audio:684kB global headers:0kB muxing overhead 0.006280%

Résultat : Audacity montre bien les accidents du signal toutes les 3,7
secondes environ. En zoomant sur une zone non perturbée de 1000 ms j'y
compte exactement 440,0 périodes comme d'ailleurs dans un enregistrement
effectué avec la carte son. Enregistrement disponible ici :
http://www.cijoint.fr/cjlink.php?file=cj201105/cijDt61UbA.zip
1 2