home

Divendres, 26 de Maig del 2006 a les 15h38

Cortar un trozo de mp3 en linux

Per Txapulín

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 comentaris a “Cortar un trozo de mp3 en linux”

  1. LatinLose
    Dissabte, 27 de Maig del 2006 a les 0h50
    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. txapulin
    Dissabte, 27 de Maig del 2006 a les 16h19
    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. Vemga
    Diumenge, 28 de Maig del 2006 a les 5h03
    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. txapulin
    Dilluns, 29 de Maig del 2006 a les 10h05
    4

    De nada, Vemga, gracias por el apoyo.

  5. Charlie Hi-Hat
    Dilluns, 29 de Maig del 2006 a les 10h27
    5

    Gracias! Ahora solo falta que lo expliques para Windows XP :P

  6. mikel
    Dimarts, 30 de Maig del 2006 a les 7h07
    6

    Ei Alex , que el dia del orgullo Freak va ser el 26!! t´has equivocat de dia per posar aquest post.

  7. txapulin
    Dimarts, 30 de Maig del 2006 a les 7h25
    7

    No, el “día de l’orgullo friki” va ser el 25, i jo vaig publicar això el 26, perquè sempre arribo tard ;)

  8. mikel
    Dimecres, 31 de Maig del 2006 a les 15h41
    8

    vale , aceptamos pulpo

  9. Vigo
    Dijous, 1 de Juny del 2006 a les 18h50
    9

    Ahhh!! Sí!! Es el típico caso del head que se muerde la tail.
    (Alex sumando puntos para geek del año)

  10. txapulin
    Divendres, 2 de Juny del 2006 a les 8h01
    10

    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 ;)

  11. Òscar
    Dilluns, 5 de Juny del 2006 a les 23h27
    11

    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)