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 : 480×320 640×480 720×480
[video4linux2,v4l2 @ 0x55f99a24f700] Raw : yuyv422 : YUYV 4:2:2 : 480×320
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 480×320 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.