Cortar un trozo de mp3 en linux

Aquí va el post más geek que he puesto hasta ahora en el blog. Estoy seguro que a ninguno de mis lectores habituales le será útil, pero pronto el ojo que todo lo ve pasará por aquí y lo pondrá disponible al gran público. Además, como me sirve a mí, es más que suficiente.

El objetivo es coger un archivo en mp3 y crear uno nuevo que contenga el trozo que va desde el segundo s1 y hasta el segundo s2. Tenía que ser sencillo, estaba convencido que el lame tendría esa opción incluída, pero parece que no, o al menos no es obvio. Total, que llegué hasta aquí y me encuentro con algo parecido a esto:

mplayer -ao pcm:nowaveheader:file=/dev/fd/10 -really-quiet «archivo_origen.mp3» &1 &>/dev/null |
tail –bytes=+byte_inicio |
head –bytes=bytes_duracion |
lame –quiet -r /dev/stdin «archivo_resultante.mp3»

Dejadme explicarlo un poco. Básicamente lo que hace en global es a fuerza bruta. Decodifica el mp3 a una ristra de bytes que por la salida estándar se corta y se vuelve a codificar cortadito con el lame. ¿Un poco más despacio? Vale.

El mplayer es un fantástico reproductor de archivos multimedia para linux, desde películas a canciones. En la primera línea le decimos al mplayer que, en vez de mandar el mp3 al altavoz, que lo mande a la salida estándar en formato pcm, que es el que acabará entendiendo el lame. El comando tail nos corta el inicio (nos deja la cola, el final, vamos) hasta el byte que le digamos. El head es al revés, nos deja el principio y nos corta la cola. Poniendo correctamente los numeritos, el lame codificará en mp3 únicamente el trozo que le llegue.

¿Cómo calcular el número de bytes?

El bitrate (número de bits por segundo) de un mp3 se obtiene multiplicando la frecuencia (44100, normalmente) por el número de canales (2 si es stereo) por la profundidad (suele ser 16). O sea que el bitrate más común es 1411200 bits por segundo. Como cada byte son 8 bits, nos sale a 176400 bytes por segundo. Conociendo el segundo de inicio y el del final, es fácil calcular los parámetros byte_inicio y bytes_duracion.

Ejemplo

Necesito cortar treinta segundos de elsilenciodeloscorderos.mp3, desde el segundo 50 hasta el 80, y guardarlo en extracto.mp3, porque es la parte que más me gusta. El byte_inicio será el 8820000 (50 * 176400) y 30 segundos son 5292000 bytes. Esto va así:

mplayer -ao pcm:nowaveheader:file=/dev/fd/10 -really-quiet «elsilenciodeloscorderos.mp3» &1 &>/dev/null |
tail –bytes=+8820000 |
head –bytes=5292000 |
lame –quiet -r /dev/stdin «extracto.mp3»

Estoy seguro que hay formas más fáciles, pero así he aprendido un montón.

11 opiniones en “Cortar un trozo de mp3 en linux”

  1. Pero el proceso que tú me dices no me vale, es muy cutre, porque hay dos conversiones de por medio cuando no son necesarias, con la consiguiente degradación de la calidad.

    De Linux no sé mucho, pero en cambio sí se buscar por internet, y por ejemplo en softonic hay algunos editores de audio que seguro que te pueden rendir algún servicio para lo que pretendes conseguir.

  2. Puede que olvidara decir que buscaba una solución con los elementos que tenía ya instalados y a mano. Y es cierto, aunque exagerado, lo de que se pierde calidad, pero como esta pérdida no es audible, no me importa.

    Para la próxima ya me instalaré el audacity, que pinta bien.

  3. tratar un mp3 sin decodificar y cortarlo por unos segundos con correccion resultaria un proceso mucho mas jodido, por no decir imposible para una determinada precision temporal (aunque nadie ha dicho nada de conseguir tantisima precision, pero me ha molado decir la frase)

    las codificaciones y decodificaciones pueden llegar a resultar audibles, incluso aunque sea solo un ciclo (lo minimo) es indemostrable que pasarlo a mp3 no implique una perdida audible.
    de todas maneras yo creo que por un par de ellas mas, como propone txapulin, no hay persona en el mundo capaz de enterarse ni de coña, asi que a mi el metodo me gusta

    ademas, todo esto me recuerda una epoca divertida, asi que gracias por el post

  4. Ja ja! Nada ¿dónde se apunta uno a ese concurso? Y es que yo seré geek, pero vosotros sois los frikis que leéis posts como éste pensados sólo para que los lea mr. google 😉

  5. Mare meva!
    Entro a llegir-te i em trobo aquesta freakada. vale, sí, que ho expliques molt bé, però molt útil nom’ha estat, realment…
    En fi, salut i peles! 🙂
    (per cert, El Codi Da Vinci apesta)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *