ATOTCLIC Linux Grabar vídeo con audio interno y micrófono con ffmpeg en debian

Grabar vídeo con audio interno y micrófono con ffmpeg en debian

El otro día me hicieron una pregunta, como podía grabar el audio interno del escritorio y el micrófono a la vez, en este caso mi respuesta fue con pulseaudio y ffmpeg, aunque la cuestión era grabar vídeo con audio interno y micrófono con ffmpeg en debian.

Pues bien para ello tenemos que tener instalado pulseaudio, no voy a explicar como hacerlo, solo el concepto de capturar el audio interno y micrófono y también tenemos que tener ffmpeg.

Para proceder a capturar el audio crearemos un modulo nulo module-null-sink el cual envía toda la salida a /dev/null, lo creamos así:

pactl load-module module-null-sink sink_name=conmimodulo

ahora dentro del modulo creado «conmimodulo» nombre descriptivo vamos a añadir la entrada de audio del micrófono de esta forma:

pactl load-module module-loopback source="alsa_input.usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam.analog-mono" sink=conmimodulo

Una vez cargado este modulo cargaremos la salida de audio del escritorio de la misma manera:

pactl load-module module-loopback source="alsa_output.pci-0000_00_14.2.analog-stereo.monitor" sink=conmimodulo

Para saber que fuente escoger lo podemos ver así:

pacmd list-sources   esta es la salida del micrófono

index: 1
name: <alsa_input.usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam.analog-mono>
driver: <module-alsa-card.c>
flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
state: RUNNING
suspend cause:
priority: 9049
volume: mono: 44647 /  68% / -10,00 dB
balance 0,00
base volume: 9619 /  15% / -50,00 dB
volume steps: 65537
muted: no
current latency: 0,42 ms
max rewind: 0 KiB
sample spec: s16le 1ch 48000Hz
channel map: mono
Mono
used by: 2
linked by: 2
fixed latency: 99,94 ms
card: 1 <alsa_card.usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam>
module: 7
properties:
alsa.resolution_bits = "16"
device.api = "alsa"
device.class = "sound"
alsa.class = "generic"
alsa.subclass = "generic-mix"
alsa.name = "USB Audio"
alsa.id = "USB Audio"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
alsa.device = "0"
alsa.card = "2"
alsa.card_name = "A4 TECH PC Cam"
alsa.long_card_name = "PixArt Imaging Inc. A4 TECH PC Cam at usb-0000:00:12.2-1, high speed"
alsa.driver_name = "snd_usb_audio"
device.bus_path = "pci-0000:00:12.2-usb-0:1:1.2"
sysfs.path = "/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.2/sound/card2"
udev.id = "usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam"
device.bus = "usb"
device.vendor.id = "093a"
device.vendor.name = "Pixart Imaging, Inc."
device.product.id = "2700"
device.product.name = "A4 TECH PC Cam"
device.serial = "PixArt_Imaging_Inc._A4_TECH_PC_Cam"
device.form_factor = "webcam"
device.string = "hw:2"
device.buffering.buffer_size = "9594"
device.buffering.fragment_size = "2398"
device.access_mode = "mmap"
device.profile.name = "analog-mono"
device.profile.description = "Mono Analógico"
device.description = "A4 TECH PC Cam Mono Analógico"
alsa.mixer_name = "USB Mixer"
alsa.components = "USB093a:2700"
module-udev-detect.discovered = "1"
device.icon_name = "camera-web-usb"
ports:
analog-input-mic: Micrófono (priority 8700, latency offset 0 usec, available: unknown)
properties:
device.icon_name = "audio-input-microphone"
active port: <analog-input-mic>

Para ver los sinks

pacmd list-sinks   este es el que he creado para realizar el vídeo con el nombre conmimodulo

index: 5
name: <conmimodulo>
driver: <module-null-sink.c>
flags: DECIBEL_VOLUME LATENCY FLAT_VOLUME DYNAMIC_LATENCY
state: RUNNING
suspend cause:
priority: 1000
volume: front-left: 65536 / 100% / 0,00 dB, front-right: 65536 / 100% / 0,00 dB
balance 0,00
base volume: 65536 / 100% / 0,00 dB
volume steps: 65537
muted: no
current latency: 9,05 ms
max request: 3 KiB
max rewind: 3 KiB
monitor source: 6
sample spec: s16le 2ch 44100Hz
channel map: front-left,front-right
Estéreo
used by: 2
linked by: 5
configured latency: 20,00 ms; range is 0,50 .. 2000,00 ms
module: 28
properties:
device.description = "Salida Nula"
device.class = "abstract"
device.icon_name = "audio-card"

Y para ver las fuentes:

pacmd list-modules

 

Bueno como podemos observar se nos han dado unos indices y creado los modulos, proseguimos para grabar el vídeo .

El vídeo lo grabaremos de la siguiente forma y lo adaptaremos a lo que queramos grabar

ffmpeg -f x11grab -s 1280x1005 -r 25 -i :0.0+1280,19 -f pulse -i conmimodulo.monitor -ac 2 -b:v 25000k -y conmimodulo.avi

bien indicamos a ffmpeg que queremos grabar el escritorio indicando x11grab con un tamaño de 1280×1005 este sera el tamaño del vídeo y siempre se tiene que ajustar al tamaño que podemos grabar si hubiese puesto 1006 un pixel mas este seria el resultado:

[x11grab @ 0x155cc80] Capture area 1280x1006 at position 1280.19 outside the screen size 2560x1024
:0.0+1280,19: Invalid argument

He indicado que quiero grabar 25 FPS  y la región a grabar esta ubicada en :0.0+1280,19 pues bien empezando desde las coordenadas 0.0 grábame a partir de la 1280,19 que significa, pues grábame la pantalla de la derecha 1280 a partir del pixel 19, osea elimina la barra superior, el error anterior indica el tamaño de mi escritorio 2560×1024 del cual solo grabaremos 1280×1006 empezando por el pixel 1280,19, si queremos saber las coordenadas podemos utilizar xwininfo, queda claro, ¿no?.

Seguimos indico que utilice pulse y en este caso que utilice conmimodulo.monitor en estereo (-ac 2) con una velocidad de salida de bits de 25000k aceptamos sobreescribir conmimodulo.avi

Para ver si funciona vamos a grabar un vídeo en este caso uno incrustado dentro del otro.

 

Para visualizarlo he utilizado mplayer.

mplayer conmimodulo.avi

Eso es todo.

Related Post

KERNEL PANICKERNEL PANIC

¿Bueno que es KERNEL PANIC ? En wikipedia es esto: El kernel panic (en español: núcleo en pánico) es un mensaje mostrado por un sistema operativo una vez detectado un