Estoy usando este script:http://www.thegameengine.org/miscellaneous/streaming-twitch-tv-ubuntu/para transmitir a Twitch. Funciona pero no quiero transmitir mi micrófono, solo el audio de la computadora. ¿Cómo debo cambiar el guión para lograrlo?
Respuesta1
Elegir el audio de la computadora
PulsoAudio
Esto se puede hacer con PulseAudio y pavucontrol
. DeCÓMO: Screencasting adecuado en Linux:
Instalar
pavucontrol
. Comience a grabar conffmpeg
. Comenzarpavucontrol
. Vaya a la pestaña "Grabación" y lo encontraráffmpeg
allí. Cambie la captura de audio de "Audio interno analógico estéreo" a "Monitor de audio interno analógico estéreo". Ahora debería grabar el audio del sistema y de la aplicación en lugar del micrófono.Esta configuración será recordada. La próxima vez que desee capturar con
ffmpeg
, comenzará automáticamente a grabar el audio del sistema. Si desea revertir esto, usepavucontrol
nuevamente para volver a la entrada de micrófono.
ALSA
Alternativamente, ALSA puede capturar el audio del sistema si su sistema de audio admite un dispositivo de bucle invertido a menudo etiquetado:Mezcla estéreo,Mezclar con la mano,Mezcla monocromática, oLo que escuchas. Consulte alsamixer
para ver si tiene uno de estos, peroEl loopback de hardware no es tan común hoy en día.. Luego consulteFFmpeg Wiki: Captura de audio con ALSApara obtener la sintaxis adecuada si su sistema admite esta función.
De lo contrario, creo que se puede hacer un loopback de software con ALSA, pero puede que me equivoque y no tenga experiencia con eso.
guión de mierda
El ffmpeg
comando en ese horrible script recurrente tiene algunos problemas:
-preset
debe usarse en lugar de-vpre
-qscale
es ignorado por libx264 (use-crf
o-b:v
)- El grupo de imágenes no está configurado (use
-g
) - Se debe usar VBV (usar
-maxrate
y-bufsize
) - Es posible que la salida no utilice un esquema de submuestreo de croma compatible (use
-pix_fmt yuv420p
) - La entrada x11grab debe usarse
-framerate
, no-r
-threads 6
Parece un número arbitrario y no todos usan el mismo hardware. Deberías usar el valor predeterminado (eliminando-threads
, pero es "codicioso"), o establecer un valor apropiado que te permita codificar a un ritmo satisfactorio y aun así permitir suficiente energía para realizar las otras cosas que estás grabando.
En su lugar, el comando debería ser algo como esto:
ffmpeg \
-f alsa -ac 2 -i "$INAUD" \
-f x11grab -video_size "$INRES" -framerate "$FPS" -i :0.0 \
-vcodec libx264 -s "$OUTRES" -preset "$QUAL" -maxrate 1000k -bufsize 2000k -g 50 -pix_fmt yuv420p \
-acodec libmp3lame -ar 44100 -b:a 128k \
-f flv "$STREAM_URL"
Nota:No use ciegamente mis valores de ejemplo para -maxrate
, -bufsize
, -g
y -b:a
. Debe ajustarlos según sus necesidades como se describe enCodificación para sitios de streaming con FFmpeg. Ver tambiénGuía de codificación de vídeo FFmpeg H.264.