grabar audio de la aplicación solo con ffmpeg

2

Me gustaría usar ffmpeg para usar el audio de la aplicación solo en lugar del audio del sistema completo mientras tomo la pantalla. ¿Cómo puedo hacer esto si el comando de agarre es algo como esto? Por aplicación específica quiero decir que puede ser audio de Chrome (el audio sale de Chrome a través de Internet)

ffmpeg -f x11grab -s `xdpyinfo | grep 'dimensions:'|awk '{print $2}'` -r 25 -i :0.0 -sameq  desktop.mkv

Traté de usar el audio de pulso pero no pude hacerlo funcionar.

Si alguien pudiera publicar un enlace a una configuración de audio de pulso en funcionamiento, estaría agradecido. Quiero hacer esto programáticamente. ¡Y también si estoy ejecutando dos transmisiones de audio separadas, debería poder capturar solo una! No pude configurar eso usando pavucontrol

Pavan K
fuente

Respuestas:

0

En primer lugar, no use -sameq: no significa "misma calidad" y recientemente se ha eliminado de ffmpeg. En cambio, puede codificar sin pérdidas con libx264:

ffmpeg -f x11grab -s $(xdpyinfo | grep 'dimensions:'|awk '{print $2}') -r 25 -i :0.0 -codec:v libx264 -preset ultrafast -qp 0 lossless.mkv

Usar un codificador sin pérdidas es rápido; lo que significa que tiene una mejor oportunidad de capturar realmente a la velocidad de fotogramas declarada. Sin embargo, la salida puede ser un archivo enorme, por lo que una vez que se completa la captura, generalmente se vuelve a codificar a un tamaño más manejable:

ffmpeg -i lossless.mkv -codec:v libx264 -preset medium -crf 23 -pix_fmt yuv420p output.mp4

Si su computadora puede manejarlo, puede omitir el paso intermedio sin pérdida y codificar directamente a video H.264 con pérdida normal.

En cuanto al audio, de acuerdo con HOWTO: Proper Screencasting en Linux :

P: ¿Cómo puedo controlar la entrada de PulseAudio? (por ejemplo, capturar el audio de la aplicación en lugar del micrófono)

A: Instale "pavucontrol". Comience a grabar con ffmpeg. Inicie pavucontrol. Vaya a la pestaña "Grabación" y encontrará ffmpeg en la lista. Cambie la captura de audio de "Audio estéreo analógico interno" a "Monitor de audio estéreo analógico interno". Ahora debería grabar el sistema y el audio de la aplicación en lugar del micrófono.

Su comando ffmpeg puede verse así:

ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1024x768 -i :0.0 -codec:a pcm_s16le -codec:v libx264 -preset ultrafast -qp 0 output.mkv 

Consulte también la Guía de codificación FFmpeg y x264 .

lema
fuente
1
Pero quiero hacer esto programáticamente. ¡Y también si estoy ejecutando dos transmisiones de audio separadas, debería poder capturar solo una! No pude configurar eso usando pavucontrol.
Pavan K
@PavanK Deberías haber mencionado esto en tu pregunta.
lema
Acabo de agradecer su respuesta y su sugerencia también :)
Pavan K