en linux, es posible digitalizar la señal de una fuente analógica (vía conectores RCA o S-Video) mediante un adaptador de captura de video USB compatible con v4l2.
detección del adaptador
lsusb
Bus 001 Device 002: ID 534d:0021 MACROSILICON AV TO USB2.0
arecord -l
**** Lista de CAPTURE dispositivos hardware ****
tarjeta 1: USB20 [AV TO USB2.0], dispositivo 0: USB Audio [USB Audio]
Subdispositivos: 0/1
Subdispositivo #0: subdevice #0
siendo que el dispositivo capturador de audio se identifica como la tarjeta 1, se pueden comprobar sus atributos mediante amixer
:
amixer -c 1
Simple mixer control 'Mic',0
Capabilities: cvolume cvolume-joined cswitch cswitch-joined
Capture channels: Mono
Limits: Capture 0 - 8191
Mono: Capture 8191 [100%] [31.99dB] [on]
v4l2-ctl
sudo apt show v4l-utils
Collection of command line video4linux utilities.
v4l-utils contains the following video4linux command line utilities:
[...]
v4l2-ctl, cx18-ctl, ivtv-ctl: tools to control v4l2 controls from the cmdline
v4l2-ctl --list-devices
AV TO USB2.0 (usb-0000:00:02.1-1):
/dev/video0
/dev/video1
/dev/media0
v4l2-ctl --all
Driver Info:
Driver name : uvcvideo
Card type : AV TO USB2.0
Bus info : usb-0000:00:02.1-2
Driver version : 5.4.151
[...]
Format Video Capture:
Width/Height : 480/320
Pixel Format : 'YUYV' (YUYV 4:2:2)
Field : None
Bytes per Line : 960
Size Image : 307200
Colorspace : sRGB
etcétera.
ffmpeg
ffmpeg -sources | grep video
ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
[...]
Auto-detected sources for video4linux2,v4l2:
/dev/video1 [AV TO USB2.0]
/dev/video0 [AV TO USB2.0]
ffmpeg -list_formats all -i /dev/video0
ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
[...]
[video4linux2,v4l2 @ 0x55f99a24f700] Compressed: mjpeg : Motion-JPEG : 480x320 640x480 720x480
[video4linux2,v4l2 @ 0x55f99a24f700] Raw : yuyv422 : YUYV 4:2:2 : 480x320
reproducción de la señal AV
vlc
tanto el comando v4l2-ctl
como ffmpeg
informan de que el adaptador de video se identifica en el sistema operativo como /dev/video0. del siguiente modo, si se dispone de vlc, es posible comprobar en vivo la entrada de la señal analógica:
vlc v4l2:///dev/video0
gst-launch-1.0
video
gst-launch-1.0 v4l2src device=/dev/video0 ! autovideosink
lanzada esta orden, debería aparecer una ventana de 480x320 píxeles reproduciendo el contenido de la señal de AV (en este caso, dado que la fuente solicitada es v4l2src, únicamente el video).
audio
gst-launch-1.0 alsasrc device=hw:1,0 ! pulsesink
la identificación del dispositivo de audio como hw:1,0 se obtiene gracias a la información facilitada por el comando arecord
: tarjeta 1, dispositivo 0.
video + audio
gst-launch-1.0 v4l2src device=/dev/video0 ! autovideosink alsasrc device=hw:1,0 ! pulsesink
son necesarios dos espacios (en lugar de uno) entre sentencia y sentencia (es decir, entre autovideosink y alsasrc) para lograr la reproducción simultánea de video y audio.
grabación de la señal AV
video
gst-launch-1.0 -e v4l2src device=/dev/video0 ! videoconvert ! x264enc ! mp4mux ! filesink location=~/tmp/salida.mp4
esta sentencia graba únicamente la señal de video (v4l2src) al archivo ~/tmp/salida.mp4: el video se codifica como x264enc y se almacena dentro del formato contenedor MP4.
audio: ogg y mp3
gst-launch-1.0 -e alsasrc device=hw:1,0 ! audioconvert ! vorbisenc ! oggmux ! filesink location=~/tmp/audio.ogg
gst-launch-1.0 -e alsasrc device=hw:1,0 ! audioconvert ! audioresample ! lamemp3enc ! filesink location=~/tmp/audio.mp3
según parece, a diferencia de lamemp3enc, el elemento vorbisenc no necesita audioresample para funcionar.
video + audio
gst-launch-1.0 -e v4l2src device=/dev/video0 ! videoconvert ! x264enc ! mp4mux name=mux ! filesink location=~/tmp/video.mp4 alsasrc device=hw:1,0 ! audioconvert ! audioresample ! lamemp3enc ! mux.
son necesarios dos espacios entre las sentencias de ambas fuentes (es decir, entre location=~/tmp/video.mp4 y alsasrc).
video + audio con mucha queue
gst-launch-1.0 -e v4l2src device=/dev/video0 ! queue ! videoconvert ! queue ! x264enc ! queue ! mp4mux name=mux ! queue ! filesink location=~/tmp/video.mp4 alsasrc device=hw:1,0 ! queue ! audioconvert ! queue ! audioresample ! queue ! lamemp3enc ! queue ! mux.
edición del video
recortando vía consola
ffmpeg -i video.mp4 -ss 00:16:03 -to 00:18:43 -c copy copia.mp4
fuentes
- «Capturar pantalla con VLC video + audio» en Radios Libres.
- daiatlus79, «EasyCap DC60 (STK1160) + VLC + Xubuntu 13.10 = OpenSource Video Capture!!» en instructables circuits.
- «gst-launch-1.0» en GStreamer.
- «How to digitize old VHS videos with an EasyCAP UTV007 USB converter on Linux» en Michael Franzl.
- «hum4n0id/gstreamer_pipeline_samples.md» en GitHub Gist.
- nayana, «Gstreamer recording video with audio» en stackoverflow.
- «Software for using EasyCAP USB video capture device» en Ask Ubuntu.