Edición de audio en el terminal
Una de las grande ventajas del terminal es la posibilidad de automatizar tareas mediante, sencillos, y no tan sencillos scripts. Ahí depende de las necesidades de cada uno. De esta manera, algo que es algo placentero para ti, como puede ser el hecho de grabar un podcast, se puede convertir en una auténtica tortura, o por lo menos algo tedioso a la hora de añadir etiquetas, convertir a otros formatos e incluso pasar a vídeo para subir a YouTube. Aquí de nuevo es donde interviene la magia del terminal y las posibilidades que te ofrece de automatizar estas tareas. Y no solo se trata de etiquetas, sino también de realizar edición de audio en el terminal.
Lo cierto es que me gusta grabar podcast, escribir artículos y, sobre todo, implementar aplicaciones. Sin embargo, todo lo que lo rodea, y que no se centra en la creación, me aburre soberanamente. Poner etiquetas, subir a los distintos medios de distribución, publicar en redes sociales. Todo esto, me resulta tedioso, y por eso lo intento automatizar todo.
Así en el episodio de hoy del podcast te quiero hablar sobre una herramienta imprescindible para editar audio y vídeo desde el terminal. Se trata de una herramienta muy conocida, pero seguro que hoy te descubro algún truco que otro, para sacarle mas partido. O al menos, ese es mi objetivo.
Edición de audio en el terminal
Como te he adelantado en la introducción, el objetivo del podcast de hoy es mostrarte algunas de las opciones, que ffmpeg
pone a tu alcance para facilitarte la edición de audio en el terminal.
ffmpeg
es toda una navaja suiza, pero tiene un inconveniente, y es la cantidad de opciones y posibilidades que ofrece. Desde luego si todos los días lidias con esta herramienta es posible que las hayas conseguido memorizar. Sin embargo, si lo utilizas de forma esporádica como es mi caso, esto es una misión imposible.
Esto es precisamente la razón para recurrir al uso de scripts que te faciliten este trabajo, e incluso a combinarlo con el tutorial sobre diálogos para scripts, adaptándolo incluso a tu entorno de escritorio, como por ejemplo con el capítulo sobre diálogos para KDE.
Voy a dividir esto en dos secciones, la primera correspondiente a la edición de audio, y la segunda correspondiente a la edición de vídeo.
Un par de opciones útiles
Antes de lanzarnos a realizar operaciones con ffmpeg
, indicarte que tienes un par de comandos que te van a resultar, al menos interesantes, como son,
ffmpeg -codecs
para listar todos los codecs disponiblesffmpeg -formats
lo mismo que el anterior, pero en este caso, para listar los formatos soportados.
Sobre la notación
-i
es para indicar el archivo de entrada-c
se refiere al codec que se va a utilizar. Si te quieres referir al codec de audio, utiliza-c:a
y si te refieres al de vídeo, utiliza-c:v
. Si no vas a cambiar el codec, que simplemente lo vas a copiar, utiliza la opcióncopy
. Así, para copiar el codec de audio tienes que utilizar la opción-c:a copy
. Esto tiene su utilidad, y luego verás porque.-q
te permite indicar la calidad y tiene la misma notación que para el códec, es decir,-q:a
para el audio y-q:v
para el vídeo.-b
es el que indica la tasa de bits, el bitrate, al igual que los anteriores, tanto para audio como para vídeo.-vn
,-an
y-sn
con estas opciones lo que haces es obviar el vídeo, el audio y los subtítulos respectivamente. Como te puedes imaginar con esto, es con lo que puedes extraer el audio de un vídeo de YouTube por decirte algo.
Estas son las opciones más básicas, pero solo con esto, ya te puedes hacer una perfecta idea de como trabaja esta herramienta. Mas adelante te comentaré alguna opción adicional específica para realizar algún tipo de operación concreta.
Convertir formatos
Seguro que esto de convertir entre diferentes formatos de audio lo has realizado en innumerables ocasiones. Y por supuesto que seguro, que por regla general siempre lo has realizado desde una aplicación gráfica.
Sin embargo, piensa que haces diferente de una vez a otra que realizas la conversión. Normalmente siempre conviertes al mismo formato de audio, y por regla general es mp3
. ¿porque no automatizarlo?
Aquí te propongo que le des un vistazo al artículo sobre inotify tools o como automatizar tu sistema de archivos.
En particular, te recomiendo, el script para automatizar extraer el audio de cualquier archivo con extensión mp4
Si lo que vas a hacer es convertir a formato mp3
siempre lo puedes hacer de la siguietne forma,
ffmpeg -i archivo_de_entrada salida.mp3
Sin embargo, si quieres tener mas control sobre como se realiza la conversión, puedes ejecutarlo como sigue
ffmpeg -i archivo_de_entrada -c:a libmp3lame -q:a 2 salida.mp3
Donde le indicas tanto el codec a utilizar , en este caso libmp3lame
como la calidad del audio. Respecto a la calidad del audio, se trata de un valor comprendido entre 0 y 9, de forma que a un valor mas bajo mayor calidad y a un valor mas alto peor calidad. El valor por defecto es 4.
Si necesitas un bitrate constante, en lugar de utilizar la calidad, tienes que definir ese bitrate, utilizando para ello la notación -b:a <bitrate>
. En este caso los valores posibles son los siguientes,
8, 16, 24, 32, 40, 48, 64, 80, 96, 112, 128, 160, 192, 224, 256, or 320
Indicarte que yo utilizo la opción de un bitrate constate de 80 kBits/s. Esto lo puedes hacer con la siguiente configuración,
ffmpeg -i archivo_de_entrada -c:a libmp3lame -b:a 80k salida.mp3
Indicarte que si pones tanto la tasa de bits como la calidad, evidentemente realizará la operación mas restrictiva.
Extraer parte de un audio
Si lo que quieres es recortar un audio, tienes que indicar el punto de inicio y el punto de final, de la siguiente forma,
ffmpeg -ss <inicio> -i <original> -to <final> -c copy <salida>
Por ejemplo si quisieras recortar del minuto 5 al minuto 10 de un audio, podría ser algo como lo que te muestro a continuación,
ffmpeg -ss 00:05:00 -i entrada.mp3 -to 00:10:00 -c copy salida.mp3
Fíjate que -ss
está puesto antes de -i
, este es un detalle importante, a la hora de hacer el recorte. Si lo pones después del archivo de entrada, la velocidad será mucho mas lenta, porque tiene que decodificar antes de realizar la búsqueda de la posición.
Por otro lado, también tienes la opción -t
que indica el tiempo en segundos de forma relativa. Es decir, con -t 120
indicaría que solo quieres 2 minutos desde que comenzó el recorte.
Unir dos o mas audios
ffmpeg
te ofrece diferentes opciones para unir dos o mas audios. La primera consiste en generar un archivo intermedio donde esté listado cada uno de los audios, como por ejemplo podría ser algo como lo que te muestro a continuación,
# archivos
archivo1.mp3
archivo2.mp3
archivo3.mp3
A continuación tendrías que ejecutar la siguiente instrucción,
ffmpeg -f concat -safe 0 -i audios.txt -c copy salida.mp3
Donde audios.txt es el archivo anterior.
La otra opción es utiliar el siguiente formato,
ffmpeg -i "concat:archivo1.mp3|archivo2.mp3|archivo3.mp3" -c copy salida.mp3
A mi desde luego, me resulta mucho mas cómodo la segunda opción que la primera, porque entre otras cosas no es necesario crear un archivo temporal que contenga el listado de archivos.
Recortar un audio
Pero, ¿y si lo que quieres es quitar una parte del audio? Pongamos que tienes un audio de 10 minutos, y quieres quitar del minuto dos al minuto cuatro, ¿como lo haces?
De nuevo aquí tienes dos aproximaciones, donde la primera ya te la puedes imaginar. No es otra cosa que extraer las partes que quieres según el procedimiento anterior, y posteriormente unirlas, también utilizando lo descrito en el apartado precedente.
Otra opción, es utilizar el -filter_complex
de ffmpeg. Así en el ekemplo anterior sería algo como lo que te muestro a continuación,
ffmpeg -i todo.mp3 -filter_complex "[0]atrim=duration=10[a];[0]atrim=start=20[b];[a][b]concat=n=2:v=0:a=1" test.mp3
Etiquetas en los audios
Es algo muy habitual que todo audio venga con su correspondiente metainformación. Diferentes etiquetas que te dan todo tipo de información, desde el título de la pista, el artista, el género y otros datos similares.
Como ya te has podido imaginar, esto también lo puedes hacer directamente desde ffmpeg
, simplemente tienes que utilizar la opción -metadata
junto con la etiqueta que quieres incorporar, por ejemplo,
title
para el títulodecription
para la descripcióncomment
para los comentariosartist
para el artistaalbum
el álbumdate
el añogenre
el género
Si quisieras quitar todas las etiquetas de un audio, simplemente tienes que establecer el valor a vacío. Por ejemplo, para el caso del título sería algo como,
ffmpeg -i <archivo> -metadata title="" <salida>
Añadir una portada al audio
Algo que ya es habitual a la hora de editar un audio en el terminal, es añadir una portada al audio, o al menos para mi. Esto, por supuesto, también lo puedes hacer con ffmpeg
, para ello tienes que utilizar una instrucción como la que te muestro a continuación,
ffmpeg -i <audio> -i <portada> -map 0:0 -map 1:0 -c copy -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (front)" <audio-de-salida>
Manipulación del volumen de un audio
Algo que te puede suceder con mas o menos frecuencia es que necesites editar tu audio en el terminal, aumentando, disminuyendo o normalizando el volumen. Para hacer esto, tienes los filtros. Así, puedes reducir el volumen de tu audio utilizando la siguiente instrucción,
ffmpeg -i <archivo-de-entrada> -filter:a "volume=0.5" <archivo-de-salida>
O aumentar el volumen un 150%, utilizando esta instrucción,
ffmpeg -i <archivo-de-entrada> -filter:a "volume=1.5" <archivo-de-salida>
Si lo que quieres es normalizar el volumen percibido, puedes utilizar la siguiente instrucción,
ffmpeg -i <archivo-de-entrada> -filter:a loudnorm <archivo-de-salida>
Más información,
Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.
La entrada Edición de audio en el terminal aparece primero en El atareao.