Lame
Publicidad
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:38731] lame -b 128 --mp3input archivo.mp3 [/code:38731]
¿Se llama "recursivo" lo que pretendo ? , ¿ como lo de cp -r ?
Robakun escribió:y haciendo un script?
[code:40541]for x in `ls *.mp3`;do lame -b 128 --mp3input $x;done[/code:40541]
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.
ah! es verdad, quitando `ls... `
[code:ba4ba]for x in *.mp3;do lame -b 128 --mp3input $x;done[/code:ba4ba]
lo que falta es que no añada otra vez .mp3, pero tu línea lo hacía
El caso general:
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:ba4ba]#/bin/bash
for x in *.mp3;do lame -b $1 --mp3input $x;done[/code:ba4ba]
Si lo llamas mp3cbr, lo llamas así:
[code:ba4ba]$mp3cbr 128[/code:ba4ba]
saludos
[code:ba4ba]for x in *.mp3;do lame -b 128 --mp3input $x;done[/code:ba4ba]
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:ba4ba]#/bin/bash
for x in *.mp3;do lame -b $1 --mp3input $x;done[/code:ba4ba]
Si lo llamas mp3cbr, lo llamas así:
[code:ba4ba]$mp3cbr 128[/code:ba4ba]
saludos
guitman escribió:Robakun escribió:y haciendo un script?
[code:a6e05]for x in `ls *.mp3`;do lame -b 128 --mp3input $x;done[/code:a6e05]
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:a6e05]ls *.mp3 | while read x[/code:a6e05]
en lugar de:
[code:a6e05]for x in `ls *.mp3`[/code:a6e05]
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--.
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:6f5d0]ls *.mp3|while read x;do lame -b 128 --mp3input "$x";done[/code:6f5d0]
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
. 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?
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:6f5d0]ls *.mp3|while read x;do lame -b 128 --mp3input "$x";done[/code:6f5d0]
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
Con esto:
[code:3d6a4]#/bin/bash
for x in ls *.mp3 | while read x;do lame -b 128 --mp3input "$x";done[/code:3d6a4]
me sale esto:
[code:3d6a4]
./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:3d6a4]
¿ Podríais indicarme el fallo ? ¿Qué información tengo que buscar para hacr un script de esos?
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 .
[code:3d6a4]#/bin/bash
for x in ls *.mp3 | while read x;do lame -b 128 --mp3input "$x";done[/code:3d6a4]
me sale esto:
[code:3d6a4]
./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:3d6a4]
¿ 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 .
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:e0504]ls *.mp3|while read x;do lame -b 128 --mp3input "$x";done[/code:e0504]
Eso es , bastaba con quitar lo de for x in , muchas gracias. Ahora funciona
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
¿ 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:73359] guitman@debian:/tmp/128$ mp3cbr ../canciones
ls: *.mp3: No existe el fichero o el directorio
[/code:73359]
¿cúal sería el sustituto de ls *.mp3?
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:73359] guitman@debian:/tmp/128$ mp3cbr ../canciones
ls: *.mp3: No existe el fichero o el directorio
[/code:73359]
¿cúal sería el sustituto de ls *.mp3?
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:ffb05]
#!/bin/bash
ls $1/*.mp3|while read x;do lame -b 128 --mp3input "$x";done[/code:ffb05]
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
[code:ffb05]
#!/bin/bash
ls $1/*.mp3|while read x;do lame -b 128 --mp3input "$x";done[/code:ffb05]
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
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:108e7]ls: ../canciones: No existe el fichero o el directorio
ls: bonitas//*.mp3: No existe el fichero o el directorio[/code:108e7]
Si renombro :
[code:108e7]mv ../canciones\ bonitas/ ../canciones[/code:108e7]
Y vuelvo a llamarlo así:
[code:108e7]guitman@debian:/tmp/128$ ./mp3cbr ../canciones[/code:108e7]
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 .. ?
no tengo ni idea de por donde empezar
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:108e7]ls: ../canciones: No existe el fichero o el directorio
ls: bonitas//*.mp3: No existe el fichero o el directorio[/code:108e7]
Si renombro :
[code:108e7]mv ../canciones\ bonitas/ ../canciones[/code:108e7]
Y vuelvo a llamarlo así:
[code:108e7]guitman@debian:/tmp/128$ ./mp3cbr ../canciones[/code:108e7]
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 .. ?
A ver si este script es el definitivo, he añadido que los archivos finales terminen en ...-128brt.mp3
[code:0fcc3]#!/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:0fcc3]
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"
-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:0fcc3]~/128$ mp3cbr ./carpeta\ bonita[/code:0fcc3]
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
[code:0fcc3]#!/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:0fcc3]
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"
Este script admite paths con espacios pero debes escribirlos en la forma convencional: carpeta\ bonita.
[code:0fcc3]~/128$ mp3cbr ./carpeta\ bonita[/code:0fcc3]
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
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:e7e35]
$ man basename
[/code:e7e35]
Perdón por el RTFM pero sé que podrás tú solo.
Respuesta rápida
Identíficate o regístrate para poder responder en este hilo.