(SOLUCIONADO)[ BATCH ] Ayuda con FOR / Analizar bitrate mp3 de archivos.

Iniciado por SuperDraco, 16 Marzo 2011, 09:57 AM

0 Miembros y 1 Visitante están viendo este tema.

SuperDraco

Necesito saber como puedo hacer para analizar (Dentro de un directorio) el bitrate de los archivos mp3, lo que realmente necesito es saber cuales son MAYORES de 160 kbps para asignarle un proceso, y olvidarme de los menores de 160 kbps...mediante un batch...

Alguien me puede ayudar con este tema? :/


EDITO: Vale, rebuscando mucho al final me he ayudado del mplayer, aunque el proceso tarda mucho..unos 5 segundos para "escanear" un archivo, pero algo es algo... he conseguido hacer esto, pero está mal echo:

@echo off

for /f "tokens=*" %%a in ('dir /B *.mp3') do mplayer "%%a" -frames 0 | findstr /c:"320.0 kbit" >null & call :error

:error
IF %ERRORLEVEL% LEQ 0 echo %%a es mayor de 160 kbps & pause
IF NOT %ERRORLEVEL% LEQ 0 echo %%a es menor de 160 k & pause


El problema es en la parte del errorlevel " echo %%a es mayor de 160 kbps & pause" no se m muestra el nombre del archivo, esto es un inconveniente porque entonces como puedo trabajar con el nombre del archivo para asignarle algún proceso?

Una imagen para que me entendais:



Si no me resuelve el nombre del archivo de FOR, entonces no podré hacer un...
Código (ada) [Seleccionar]
IF %ERRORLEVEL% LEQ 0 "Reducir_Bitrate.exe" "%%a"

... :(

Aqui hay muchos expertos, seguro que algo se me ha pasado por alto... espero ayuda, graciasss
No he vuelto, solo estoy de paso.

leogtz

Más al rato te ayudo, no te desesperes, sigue intentando.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SuperDraco

Vale Gracias Leo, como siempre si lo consigo por mi mismo postearé la "solución" a tiempo para que no malgasten su tiempo xD, pero dudo que lo consiga.

saludos!
No he vuelto, solo estoy de paso.

SuperDraco

#3
Ups, que tonto soy, no había caído en la solución pero si que la sabía... ya lo he arreglado

solo hacia falta usar SET

Código (dos) [Seleccionar]
for /f "tokens=*" %%a in ('dir /B *.mp3') do set nombre=%%a & mplayer "%%a" -frames 0 | findstr /c:"320.0 kbit" >null & call :error

pause

:error
IF %ERRORLEVEL% LEQ 0 echo %nombre% es mayor de 160 kbps
IF NOT %ERRORLEVEL% LEQ 0 echo %nombre% es menor o igual de 160 kbps


Ahora sí!



quizás me surgan nuevos problemas, ese código solo era para probar que todo iba bien para poder continuar con mi invento xD, estén al tanto! :P

saludos!
No he vuelto, solo estoy de paso.

SuperDraco

#4
Bueno, este problema lo considero casi resuelto, de momento llevo esto:
(No estará del todo acabado hasta que no solucione un problemilla con findstr :/, este código de momento solo busca audios de 320 bitrate y tarda mucho por el maldito mplayer le cuesta leer los archivos)


Código (DOS) [Seleccionar]
@echo off
Set lista=C:\windows\Temp\Lista.txt

for /f "tokens=*" %%a in ('dir /B *.mp3') do set nombre="%%a" & mplayer "%%a" -frames 0 | findstr /c:"320.0 kbit" >null & call :error
for /f "tokens=*" %%a in ('dir /B *.mp4') do set nombre="%%a" & mplayer "%%a" -frames 0 | findstr /c:"320.0 kbit" >null & call :error
for /f "tokens=*" %%a in ('dir /B *.m4a') do set nombre="%%a" & mplayer "%%a" -frames 0 | findstr /c:"320.0 kbit" >null & call :error
for /f "tokens=*" %%a in ('dir /B *.flac') do set nombre="%%a" & mplayer "%%a" -frames 0 | findstr /c:"320.0 kbit" >null & call :error
for /f "tokens=*" %%a in ('dir /B *.wma') do set nombre="%%a" & mplayer "%%a" -frames 0 | findstr /c:"320.0 kbit" >null & call :error

cls
If exist %lista% echo+ Se han convertido los siguientes audios a MP3, Bitrate CBR 160, High quality: & echo+ & type %lista% & del /q %lista% & pause >null
If not exist %lista% echo+ No se han encontrado audios superiores a +160 bitrate... & pause >null

:error
IF %ERRORLEVEL% LEQ 0 echo+ %nombre% >> %lista% & coreconverter.exe -infile=%nombre% -outfile=%nombre% -convert_to="mp3 (Lame)" -b 160 --cbr -q 0 -noidtag
No he vuelto, solo estoy de paso.

leogtz

Se ve horrible el código en una sola línea, por favor separalo.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SuperDraco

Perdona no te entendí, te refieres a esto?: "[ code ]  [ /code ]"

Ya está, es que uso un theme de color distinto en el foro, a mi se me ve horrible como lo he dejado ahora xDDD

saludos
No he vuelto, solo estoy de paso.

leogtz

No, es un mal habito poner varias sentencias en una sola línea de código.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SuperDraco

Cita de: Leo Gutiérrez. en 16 Marzo 2011, 22:42 PM
No, es un mal habito poner varias sentencias en una sola línea de código.
Lo se, siempre lo he escuchado pero no se hacerlo mejor... no puedo modificar el código porque no se como hacer los "if" con parentesis () así de arriba a abajo como se suele hacer xD

saludos!
No he vuelto, solo estoy de paso.