Lame

guitman
#1 por guitman el 29/08/2007
¿Alguien sabe qué comando es el que hace que Lame codifique todos los archivos de un directorio sin temer que repetirlo cada vez?

Ejemplo:
tengo una carpeta con 9 temas , quiero pasarlos de mp3 con bitrate variable a fijo , por que tengo un cacharrito de roland que ( muy chulo para algunas cosas pero una mierda para leer mp3 ) no los soporta, y para cada archivo tengo que escribir lo de

[code] lame -b 128 --mp3input archivo.mp3 [/code]

¿Se llama "recursivo" lo que pretendo ? , ¿ como lo de cp -r ?
Subir
OFERTASVer todas
  • beyerdynamic DT-770 Pro
    138 €
    Ver oferta
  • -26%
    AKAI MPC Key 61
    1.290 €
    Ver oferta
  • -21%
    Zoom H4n Pro Black
    158 €
    Ver oferta
Robakun
#2 por Robakun el 30/08/2007
y haciendo un script?

[code]for x in `ls *.mp3`;do lame -b 128 --mp3input $x;done[/code]
Subir
guitman
#3 por guitman el 30/08/2007
Robakun escribió:
y haciendo un script?

[code]for x in `ls *.mp3`;do lame -b 128 --mp3input $x;done[/code]


Hola , funciona , pero no con archivos con espacios en los nombres , ¿ se puede hacer ? no tengo ni idea de hacer scripts , ¿me podrías indicar algún enlace para ello ?

Muchas gracias .

Saludos.
Subir
Robakun
#4 por Robakun el 30/08/2007
ah! es verdad, quitando `ls... `

[code]for x in *.mp3;do lame -b 128 --mp3input $x;done[/code]

lo que falta es que no añada otra vez .mp3, pero tu línea lo hacía

El caso general:

Alguien escribió:
for x in *.mp3;do [aquí lo que quieres que haga con cada x] ;done

cada x es $x

-------------

Si lo metes en un archivo de texto con la línea

#/bin/bash

y das permisos de escritura, ya tienes el escript

----------------
Si quieres parámetros te refieres a ellos con $1 $2...

Por ejemplo, con este script:

[code]#/bin/bash
for x in *.mp3;do lame -b $1 --mp3input $x;done[/code]

Si lo llamas mp3cbr, lo llamas así:

[code]$mp3cbr 128[/code]


saludos
Subir
Ismael Valladolid Torres
#5 por Ismael Valladolid Torres el 30/08/2007
guitman escribió:
Robakun escribió:
y haciendo un script?

[code]for x in `ls *.mp3`;do lame -b 128 --mp3input $x;done[/code]


Hola , funciona , pero no con archivos con espacios en los nombres , ¿ se puede hacer ? no tengo ni idea de hacer scripts , ¿me podrías indicar algún enlace para ello ?

Muchas gracias .

Saludos.


A ver, si los .mp3 originales tienen espacios, usa:

[code]ls *.mp3 | while read x[/code]

en lugar de:

[code]for x in `ls *.mp3`[/code]

Y después en la llamada a lame, entrecomilla "$x".

Dicho todo esto pasar un .mp3 de VBR a bitrate fijo es equivalente a recodificar un fichero loosy en otro formato loosy distinto: Tendrás una pérdida de calidad brutal y mucho más evidente cuanto mejor sea tu cadena de audio --queda asumido que con un iPod podrías no notarlo--.
Subir
Robakun
#6 por Robakun el 30/08/2007
Gracias por el consejo!

Como lo había hecho también daban problemas los nombres con ' - ' porque lame y otros programas creen que se trata de la salida standar, con lo que había que quitar los espacios antes. Con while solucionado

Así quedaría el script:

[code]ls *.mp3|while read x;do lame -b 128 --mp3input "$x";done[/code]


Respecto a lo que dices de los cambios de codecs. En la utilidad mp32ogg la ayuda te dice que por defecto, "mantiene"el bitrate del mp3, supongo que no se refiere el número a secas :D. Con ogg consigues mayor calidad con el mismo bitrate, ¿hay alguna tabla de equivalencia aproximada? o los algoritmo son lo suficientemente distintos para que la comparación sea siempre subjetiva?
Subir
guitman
#7 por guitman el 30/08/2007
Con esto:

[code]#/bin/bash
for x in ls *.mp3 | while read x;do lame -b 128 --mp3input "$x";done[/code]

me sale esto:

[code]
./mp3cbr
./mp3cbr: line 2: syntax error near unexpected token `|'
./mp3cbr: line 2: `for x in ls *.mp3 | while read x;do lame -b 128 --mp3input "$x";done '[/code]

¿ Podríais indicarme el fallo ? ¿Qué información tengo que buscar para hacr un script de esos?

ivalladt escribió:
[Dicho todo esto pasar un .mp3 de VBR a bitrate fijo es equivalente a recodificar un fichero loosy en otro formato loosy distinto: Tendrás una pérdida de calidad brutal y mucho más evidente cuanto mejor sea tu cadena de audio --queda asumido que con un iPod podrías no notarlo--.



Ya .esto lo sé , pero al jodido Micro Br de Boss no le gusta el bitrate variable ,creo que es eso ,por que me lanza un mensaje diciendo "unsupported format" , y tras varias pruebas llegué a esta conclusión.


Gracias .
Subir
guitman
#8 por guitman el 30/08/2007
Robakun escribió:
Gracias por el consejo!

Como lo había hecho también daban problemas los nombres con ' - ' porque lame y otros programas creen que se trata de la salida standar, con lo que había que quitar los espacios antes. Con while solucionado

Así quedaría el script:

[code]ls *.mp3|while read x;do lame -b 128 --mp3input "$x";done[/code]



Eso es , bastaba con quitar lo de for x in , muchas gracias. Ahora funciona :D

El punto ya sería que no añadiese de nuevo la extensión mp3 , ya que lo que antes era
Dolores In A Shoestand.mp3 queda ahora como Dolores In A Shoestand.mp3.mp3
Subir
Robakun
#9 por Robakun el 30/08/2007
ops llegué tarde (editado)
Subir
guitman
#10 por guitman el 30/08/2007
¿ Y cómo sería para que en lugar de leer en el directorio actual leyese en otro y pudiese escribir donde se le indique?
La idea es poner el script en /usr/local/bin y usarlo de la siguiente manera:

Creo un directorio llamado 128 y lo llamo desde él , para que me ponga ahí los archivos que están en otro lado , por ejemplo ../canciones , si lo hago , tal como está escrito , me lanzará un mensaje de error por que no encuentra los archivos a codificar en el directorio actual , lógico ,

[code] guitman@debian:/tmp/128$ mp3cbr ../canciones
ls: *.mp3: No existe el fichero o el directorio
[/code]

¿cúal sería el sustituto de ls *.mp3?
Subir
Robakun
#11 por Robakun el 30/08/2007
la cuestión es que *.mp3 siempre se refiere a donde estés. Seguro que hay una manera más elegante de hacerlo pero

[code]
#!/bin/bash
ls $1/*.mp3|while read x;do lame -b 128 --mp3input "$x";done[/code]

hace lo que quieres. $1 es el primer parámetro cuando llames al script, entonces si la llamada fuera esta:

mp3cbr /tmp

el ls se tranformaría en:ls /tmp/*.mp3
Subir
guitman
#12 por guitman el 30/08/2007
Ok , la primera parte la cumple con limitaciones , si el directorio que contiene los originales tiene espacios no los lee .

Ejemplo :

Creo un directorio /128 , me voy a el y llamo al script (el nuevo todavía en /128 ) con ./mp3cbr ../canciones bonitas , que es el que contiene los originales y sale esto:


[code]ls: ../canciones: No existe el fichero o el directorio
ls: bonitas//*.mp3: No existe el fichero o el directorio[/code]

Si renombro :

[code]mv ../canciones\ bonitas/ ../canciones[/code]

Y vuelvo a llamarlo así:

[code]guitman@debian:/tmp/128$ ./mp3cbr ../canciones[/code]

Escribirá el resultado en el directorio ../canciones , lo que yo quisiera hacer es escribir el resultado del script en el directorio en el que me encuentro , osea /tmp/128

Gracias por vuestra paciencia.

PD : ¿Dónde busco para esto? ¿ Cómo se llama lo que hacéis ? ¿bash .. ? :shock: no tengo ni idea de por donde empezar
Subir
Robakun
#13 por Robakun el 30/08/2007
A ver si este script es el definitivo, he añadido que los archivos finales terminen en ...-128brt.mp3

[code]#!/bin/bash
ls "$1"/*.mp3|while read x
do
final=`echo $x|sed 's/.mp3//'`-128brt.mp3
lame -b 128 --mp3input "$x" "$final"
#mv "$final" .
done[/code]

Por defecto saca los archivos cambiados a la carpeta donde estaban. Si quieres que los mueva a donde estás descomenta la línea "mv" :D -un poco chapuza, pero como sabes soy también aprendiz. Pero esto es lo bueno del "entre todos"

Este script admite paths con espacios pero debes escribirlos en la forma convencional: carpeta\ bonita.

[code]~/128$ mp3cbr ./carpeta\ bonita[/code]

Alguien escribió:
¿Dónde busco para esto? ¿ Cómo se llama lo que hacéis ? ¿bash .. ?


Sobre las Web, no te las di antes porque no estaba en mi ordenador, ahora puedo, ya tengo mis favoritos del firefox delante:

Programación en BASH - COMO de introducción
Bases de la programación para el Bash
Bash Guide for Beginners
Subir
guitman
#14 por guitman el 30/08/2007
Muchas gracias esto ya funciona de lujo :D .

Habrá que aprender estas cosas.
Subir
Ismael Valladolid Torres
#15 por Ismael Valladolid Torres el 30/08/2007
guitman escribió:
El punto ya sería que no añadiese de nuevo la extensión mp3 , ya que lo que antes era
Dolores In A Shoestand.mp3 queda ahora como Dolores In A Shoestand.mp3.mp3


[code]
$ man basename
[/code]

Perdón por el RTFM pero sé que podrás tú solo. ;)
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo