Problemas ao obter o VLC para gravar a partir da webcam via linha de comando


8

meu ~ / .bashrc contém a seguinte função

webcamrecord () {
vlc v4l2:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2" :v4l-norm=3 :v4l-frequency=-1 :v4l-caching=300 :v4l-chroma="" :v4l-fps=-1.000000 :v4l-samplerate=44100 :v4l-channel=0 :v4l-tuner=-1 :v4l-audio=-1 :v4l-stereo :v4l-width=640 :v4l-height=480 :v4l-brightness=-1 :v4l-colour=-1 :v4l-hue=-1 :v4l-contrast=-1 :no-v4l-mjpeg :v4l-decimation=1 :v4l-quality=100 --sout="#transcode{vfilter=adjust{gamma=1.5},vcodec=theo,vb=2000,scale=0.67,acodec=vorb,ab=128,channels=2}:standard{access=file,mux=ogg,dst="output_file.ogg"}" 
}

O comando funciona lindamente para gravar diretamente da minha webcam, com uma ou duas falhas. Primeiro, o vídeo produzido se move muito rapidamente, entre duas e três vezes a taxa normal.

Além disso, não há áudio. Esse é um problema menor, mas eu ainda gostaria de corrigir isso.

Alguém pode me ajudar a depurar esse comando, a fim de corrigir esses problemas?

Respostas:


4

Este one-liner funcionou para mim, com áudio e vídeo:

vlc v4l2:// :input-slave=alsa:// :v4l-vdev="/dev/video0" :v4l-norm=3 :v4l-frequency=-1 :v4l-caching=300 :v4l-chroma="" :v4l-fps=-1.000000 :v4l-samplerate=44100 :v4l-channel=0 :v4l-tuner=-1 :v4l-audio=-1 :v4l-stereo :v4l-width=480 :v4l-height=360 :v4l-brightness=-1 :v4l-colour=-1 :v4l-hue=-1 :v4l-contrast=-1 :no-v4l-mjpeg :v4l-decimation=1 :v4l-quality=100 --sout="#transcode{vcodec=theo,vb=2000,fps=12,scale=0.67,acodec=vorb,ab=90,channels=1,samplerate=44100}:standard{access=file,mux=ogg,dst=output.ogg}"

Você também pode tentar este:

vlc v4l2:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/pcm" :v4l-norm=3 :v4l-frequency=-1 :v4l-caching=300 :v4l-chroma="" :v4l-fps=-1.000000 :v4l-samplerate=44100 :v4l-channel=0 :v4l-tuner=-1 :v4l-audio=-1 :v4l-stereo :v4l-width=480 :v4l-height=360 :v4l-brightness=-1 :v4l-colour=-1 :v4l-hue=-1 :v4l-contrast=-1 :no-v4l-mjpeg :v4l-decimation=1 :v4l-quality=100 --sout="#transcode{vcodec=theo,vb=2000,fps=12,scale=0.67,acodec=vorb,ab=90,channels=1,samplerate=44100}:standard{access=file,mux=ogg,dst=output.ogg}"

Sua experiência pode variar, dependendo do seu hardware. Boa sorte!


Huh, nada disso está funcionando para mim. Apenas 'v4l2: /// dev / videoX' funciona, mas não sei como especificar opções lá. As opções no wiki não parece que quer trabalhar ( wiki.videolan.org/Documentation:Modules/v4l2#Video_input )
gatoatigrado

1

Por curiosidade, você tem certeza de que a fonte de áudio é a fonte adequada?

Em segundo lugar (novamente, apenas uma pergunta), por que você não está usando o ffmpeg para transmitir o vídeo?
Algo como, mas não exatamente:

ffmpeg -b 100K -an -f video4linux2 -s 320x240 -r 10 -i /dev/audio2 -i /dev/video0 -b 100K -f ogg - | mplayer - -idle -demuxer ogg

Troque a entrada de áudio e de vídeo ao seu gosto e, em seguida, mexa com a conversão de arquivo real, estou um pouco enferrujado no ffmpeg e no mplayer, mas é possível. + um amigo fez isso com raspberry pi com ~ 20fps @ 1080p, então você deve ficar bem com o equipamento padrão por esse método :)


0

Obtenha uma visão geral de todos os dispositivos (neste exemplo: / dev / video0):

v4l2-ctl --list-devices

Verifique os formatos disponíveis:

v4l2-ctl --list-formats-ext -d /dev/video0

Determine a fonte sonora (cartão: 0 ..., dispositivo: 1 ... é igual a hw: 0,1 . Neste exemplo, hw: 0,0):

arecord -l

Grave vídeo + áudio diretamente no arquivo:

cvlc v4l2:///dev/video0:width=640:height=480 :input-slave=alsa://hw:0,0 --sout="#transcode{vcodec=theo,vb=2000,fps=20,scale=1.0,acodec=vorb,ab=90,channels=1,samplerate=44100}:standard{access=file,mux=ogg,dst=output.ogg}"

Mesmo, mas com vídeo ao vivo:

cvlc v4l2:///dev/video0:width=640:height=480 :input-slave=alsa://hw:0,0 --sout="#transcode{vcodec=theo,vb=2000,fps=20,scale=1.0,acodec=vorb,ab=90,channels=1,samplerate=44100}:duplicate{dst=display,dst=standard{access=file,mux=ogg,dst=output.ogg}}"  

Você pode cvlcvoltar para vlcse quiser ter o menu controles +.

Mais opções com o módulo v4l2 no VLC.


0

Não foi possível obter resultados consistentes ou encontrar um exemplo mínimo, tentei ler as instruções grepping para coisas como esta,

 vlc --longhelp --advanced | grep v4l | grep dev

em última análise, isso parece funcionar como um exemplo mínimo,

 vlc  alsa://plughw:1,0 --input-slave=v4l2:///dev/video0

Embora eu não tenha verificado a sincronização ou a qualidade, fiquei curioso para ver que feedback de áudio e vídeo eu poderia produzir apontando a câmera para a tela e ligando o espectrômetro, pode fazer com que ambos os canais sejam reproduzidos e você pode ajustar a partir daí. Você pode obter os dispositivos apropriados a partir das respostas anteriores AFAICT.

Eu tenho esta versão:

VLC media player 2.2.2 Weatherwax (revision 2.2.2-0-g6259d80)
VLC version 2.2.2 Weatherwax (2.2.2-0-g6259d80)
Compiled by buildd on lgw01-09.buildd (Aug  8 2017 18:59:52)
Compiler: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
This program comes with NO WARRANTY, to the extent permitted by law.
You may redistribute it under the terms of the GNU General Public License;
see the file named COPYING for details.
Written by the VideoLAN team; see the AUTHORS file.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.