Diferencia entre revisiones de «Convertir MP4 a MP3»
De FSF
Sin resumen de edición |
Sin resumen de edición |
||
| Línea 214: | Línea 214: | ||
echo ============================================================ | echo ============================================================ | ||
echo CONVERSION TERMINADA | echo CONVERSION TERMINADA | ||
echo ============================================================ | |||
echo. | |||
echo Carpeta de salida: | |||
echo "%DESTINO%" | |||
echo. | |||
echo Fecha final: %date% | |||
echo Hora final: %time% | |||
echo ============================================================ | |||
echo FIN: %date% %time%>>"%LOG%" | |||
echo ============================================================>>"%LOG%" | |||
echo. | |||
pause | |||
endlocal | |||
</pre> | |||
== MP3 - Compacto == | |||
: {{a3|Convertir_MP4_a_MP3_WikiFSF_64MB.bat}} | |||
---- | |||
<pre> | |||
@echo off | |||
setlocal EnableExtensions EnableDelayedExpansion | |||
rem ============================================================ | |||
rem CONVERTIDOR AUTOMATICO DE MP4 A MP3 PARA WIKIFSF | |||
rem ============================================================ | |||
rem | |||
rem Objetivo: | |||
rem Crear archivos MP3 menores a 64 MB para poder subirlos a WikiFSF. | |||
rem | |||
rem MODO 1: | |||
rem Arrastra uno o varios archivos MP4 encima de este BAT. | |||
rem | |||
rem MODO 2: | |||
rem Si abres el BAT con doble clic, convierte todos los MP4 de: | |||
rem E:\00_APP\00_YOUTUBE_Videos\Videos_Descargados | |||
rem | |||
rem Los MP3 se guardan en: | |||
rem E:\00_APP\00_YOUTUBE_Videos\MP3_WikiFSF_64MB | |||
rem | |||
rem Estrategia: | |||
rem 1. Calcula la duracion del audio con ffprobe. | |||
rem 2. Elige un bitrate aproximado para quedar debajo de 60 MB. | |||
rem 3. Convierte a MP3 mono. | |||
rem 4. Verifica que el archivo pese menos de 64 MB. | |||
rem 5. Si pesa mas, baja calidad y vuelve a intentar. | |||
rem ============================================================ | |||
rem ============================================================ | |||
rem RUTAS PRINCIPALES | |||
rem ============================================================ | |||
set "BASE=E:\00_APP\00_YOUTUBE_Videos" | |||
set "FFMPEG=%BASE%\yt-dlp" | |||
set "ORIGEN=%BASE%\Videos_Descargados" | |||
set "DESTINO=%BASE%\MP3_WikiFSF_64MB" | |||
set "LOG=%BASE%\registro_conversion_mp3_wikifsf.txt" | |||
rem ============================================================ | |||
rem LIMITE DE TAMANO | |||
rem ============================================================ | |||
rem 64 MB seguros para WikiFSF. | |||
rem Se usa 64,000,000 bytes para dejar margen practico. | |||
rem El calculo inicial apunta a 60,000,000 bytes. | |||
set "LIMITE_BYTES=64000000" | |||
set "OBJETIVO_BYTES=60000000" | |||
rem ============================================================ | |||
rem CREAR CARPETA DE DESTINO | |||
rem ============================================================ | |||
if not exist "%DESTINO%" ( | |||
mkdir "%DESTINO%" | |||
) | |||
rem ============================================================ | |||
rem VERIFICAR FFMPEG | |||
rem ============================================================ | |||
if not exist "%FFMPEG%\ffmpeg.exe" ( | |||
echo. | |||
echo ============================================================ | |||
echo ERROR: NO SE ENCONTRO FFMPEG | |||
echo ============================================================ | |||
echo. | |||
echo Archivo esperado: | |||
echo "%FFMPEG%\ffmpeg.exe" | |||
echo. | |||
pause | |||
exit /b 1 | |||
) | |||
if not exist "%FFMPEG%\ffprobe.exe" ( | |||
echo. | |||
echo ============================================================ | |||
echo ERROR: NO SE ENCONTRO FFPROBE | |||
echo ============================================================ | |||
echo. | |||
echo Archivo esperado: | |||
echo "%FFMPEG%\ffprobe.exe" | |||
echo. | |||
pause | |||
exit /b 1 | |||
) | |||
rem ============================================================ | |||
rem MOSTRAR INFORMACION | |||
rem ============================================================ | |||
cls | |||
echo ============================================================ | |||
echo CONVERTIDOR MP4 A MP3 PARA WIKIFSF - 64 MB | |||
echo ============================================================ | |||
echo. | |||
echo FFmpeg: %FFMPEG%\ffmpeg.exe | |||
echo FFprobe: %FFMPEG%\ffprobe.exe | |||
echo Origen: %ORIGEN% | |||
echo Destino: %DESTINO% | |||
echo Limite: 64 MB maximo | |||
echo Objetivo: 60 MB aprox. para margen de seguridad | |||
echo Formato: MP3 mono | |||
echo. | |||
echo Fecha: %date% | |||
echo Hora: %time% | |||
echo. | |||
echo ============================================================ | |||
echo. | |||
rem ============================================================ | |||
rem REGISTRAR INICIO | |||
rem ============================================================ | |||
echo.>>"%LOG%" | |||
echo ============================================================>>"%LOG%" | |||
echo INICIO: %date% %time%>>"%LOG%" | |||
echo ORIGEN: %ORIGEN%>>"%LOG%" | |||
echo DESTINO: %DESTINO%>>"%LOG%" | |||
echo LIMITE_BYTES: %LIMITE_BYTES%>>"%LOG%" | |||
echo OBJETIVO_BYTES: %OBJETIVO_BYTES%>>"%LOG%" | |||
echo ============================================================>>"%LOG%" | |||
rem ============================================================ | |||
rem MODO 1: ARCHIVOS ARRASTRADOS AL BAT | |||
rem ============================================================ | |||
if not "%~1"=="" ( | |||
echo Modo: archivos arrastrados al BAT | |||
echo. | |||
:loop_arrastrados | |||
if "%~1"=="" goto fin_conversion | |||
call :convertir "%~1" | |||
shift | |||
goto loop_arrastrados | |||
) | |||
rem ============================================================ | |||
rem MODO 2: CONVERTIR TODOS LOS MP4 DE LA CARPETA ORIGEN | |||
rem ============================================================ | |||
echo Modo: convertir todos los MP4 de la carpeta origen | |||
echo. | |||
if not exist "%ORIGEN%\*.mp4" ( | |||
echo. | |||
echo ============================================================ | |||
echo NO SE ENCONTRARON ARCHIVOS MP4 | |||
echo ============================================================ | |||
echo. | |||
echo Carpeta revisada: | |||
echo "%ORIGEN%" | |||
echo. | |||
echo Tambien puedes arrastrar un MP4 encima de este BAT. | |||
echo. | |||
pause | |||
exit /b 0 | |||
) | |||
for %%F in ("%ORIGEN%\*.mp4") do ( | |||
call :convertir "%%~fF" | |||
) | |||
goto fin_conversion | |||
rem ============================================================ | |||
rem FUNCION PRINCIPAL: CONVERTIR ARCHIVO | |||
rem ============================================================ | |||
:convertir | |||
set "ARCHIVO=%~1" | |||
set "NOMBRE=%~n1" | |||
set "SALIDA=%DESTINO%\%NOMBRE%_WikiFSF_64MB.mp3" | |||
set "TEMP=%DESTINO%\%NOMBRE%_TEMP_WikiFSF.mp3" | |||
set "OK=0" | |||
echo ------------------------------------------------------------ | |||
echo Archivo: | |||
echo "!ARCHIVO!" | |||
echo. | |||
echo ARCHIVO: "!ARCHIVO!">>"%LOG%" | |||
if exist "!SALIDA!" ( | |||
for %%S in ("!SALIDA!") do set "SIZE_EXISTE=%%~zS" | |||
if !SIZE_EXISTE! LEQ %LIMITE_BYTES% ( | |||
echo Ya existe un MP3 valido menor a 64 MB. Se omite: | |||
echo "!SALIDA!" | |||
echo OMITIDO, YA EXISTE Y ES MENOR A 64 MB: "!SALIDA!">>"%LOG%" | |||
echo. | |||
exit /b 0 | |||
) else ( | |||
echo Existe un MP3, pero pesa mas de 64 MB. Se reconstruira: | |||
echo "!SALIDA!" | |||
echo BORRANDO MP3 MAYOR A 64 MB: "!SALIDA!">>"%LOG%" | |||
del /q "!SALIDA!" >nul 2>nul | |||
) | |||
) | |||
rem ============================================================ | |||
rem OBTENER DURACION CON FFPROBE | |||
rem ============================================================ | |||
set "DURACION=" | |||
for /f "usebackq tokens=*" %%D in (`"%FFMPEG%\ffprobe.exe" -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 "!ARCHIVO!"`) do ( | |||
set "DURACION=%%D" | |||
) | |||
if not defined DURACION ( | |||
set "DURACION=0" | |||
) | |||
echo Duracion detectada: !DURACION! segundos | |||
echo DURACION: !DURACION!>>"%LOG%" | |||
rem ============================================================ | |||
rem CALCULAR BITRATE MAXIMO APROXIMADO | |||
rem ============================================================ | |||
rem Formula aproximada: | |||
rem bitrate_kbps = objetivo_bytes * 8 / 1000 / duracion_segundos | |||
rem | |||
rem Luego se elige una calidad de esta lista: | |||
rem 128, 112, 96, 80, 64, 56, 48, 40, 32, 24, 16 kbps | |||
rem ============================================================ | |||
set "MAXK=64" | |||
for /f %%K in ('powershell -NoProfile -Command "$d=[double]::Parse('!DURACION!',[Globalization.CultureInfo]::InvariantCulture); if($d -le 0){64}else{[math]::Floor((%OBJETIVO_BYTES%*8/1000)/$d)}"') do ( | |||
set "MAXK=%%K" | |||
) | |||
if not defined MAXK ( | |||
set "MAXK=64" | |||
) | |||
set "STARTBIT=16" | |||
for %%B in (128 112 96 80 64 56 48 40 32 24 16) do ( | |||
if !MAXK! GEQ %%B ( | |||
if "!STARTBIT!"=="16" ( | |||
set "STARTBIT=%%B" | |||
) | |||
) | |||
) | |||
echo Bitrate maximo calculado: !MAXK! kbps | |||
echo Bitrate inicial elegido: !STARTBIT! kbps | |||
echo MAXK: !MAXK!>>"%LOG%" | |||
echo STARTBIT: !STARTBIT!>>"%LOG%" | |||
echo. | |||
rem ============================================================ | |||
rem INTENTOS DE CONVERSION | |||
rem ============================================================ | |||
rem Inicia con el bitrate calculado. | |||
rem Si el resultado pesa mas de 64 MB, baja de calidad. | |||
rem ============================================================ | |||
for %%B in (128 112 96 80 64 56 48 40 32 24 16) do ( | |||
if %%B LEQ !STARTBIT! ( | |||
call :intentar_bitrate %%B | |||
if "!OK!"=="1" ( | |||
goto conversion_exitosa | |||
) | |||
) | |||
) | |||
rem ============================================================ | |||
rem SI NINGUN INTENTO FUNCIONO | |||
rem ============================================================ | |||
echo. | |||
echo ============================================================ | |||
echo NO SE LOGRO CREAR UN MP3 MENOR A 64 MB | |||
echo ============================================================ | |||
echo. | |||
echo El archivo es demasiado largo incluso con calidad muy baja. | |||
echo Recomendacion: | |||
echo - Dividir el audio en partes. | |||
echo - Usar OGG/OPUS si tu WikiFSF lo permite. | |||
echo - Subirlo externo y enlazarlo. | |||
echo. | |||
echo ERROR: NO SE LOGRO MENOR A 64 MB: "!ARCHIVO!">>"%LOG%" | |||
echo. | |||
exit /b 0 | |||
rem ============================================================ | |||
rem CONVERSION EXITOSA | |||
rem ============================================================ | |||
:conversion_exitosa | |||
for %%S in ("!SALIDA!") do set "FINAL_SIZE=%%~zS" | |||
set /a FINAL_MB=!FINAL_SIZE!/1048576 | |||
echo. | |||
echo ============================================================ | |||
echo MP3 CREADO PARA WIKIFSF | |||
echo ============================================================ | |||
echo. | |||
echo Archivo: | |||
echo "!SALIDA!" | |||
echo. | |||
echo Tamano final aproximado: | |||
echo !FINAL_MB! MB | |||
echo. | |||
echo Estado: | |||
echo LISTO PARA SUBIR A WIKIFSF | |||
echo ============================================================ | |||
echo OK FINAL: "!SALIDA!">>"%LOG%" | |||
echo TAMANO_FINAL_BYTES: !FINAL_SIZE!>>"%LOG%" | |||
echo. | |||
exit /b 0 | |||
rem ============================================================ | |||
rem FUNCION: INTENTAR CON UN BITRATE | |||
rem ============================================================ | |||
:intentar_bitrate | |||
set "BIT=%~1" | |||
set "AR=44100" | |||
if !BIT! LEQ 64 set "AR=32000" | |||
if !BIT! LEQ 48 set "AR=22050" | |||
if !BIT! LEQ 24 set "AR=16000" | |||
set "OK=0" | |||
if exist "!TEMP!" ( | |||
del /q "!TEMP!" >nul 2>nul | |||
) | |||
echo Intentando conversion: | |||
echo Bitrate: !BIT! kbps | |||
echo Sample rate: !AR! Hz | |||
echo. | |||
echo INTENTO BITRATE: !BIT! kbps, AR: !AR!>>"%LOG%" | |||
"%FFMPEG%\ffmpeg.exe" ^ | |||
-hide_banner ^ | |||
-y ^ | |||
-i "!ARCHIVO!" ^ | |||
-vn ^ | |||
-map 0:a:0 ^ | |||
-ac 1 ^ | |||
-ar !AR! ^ | |||
-codec:a libmp3lame ^ | |||
-b:a !BIT!k ^ | |||
"!TEMP!" | |||
if errorlevel 1 ( | |||
echo. | |||
echo ERROR: FFmpeg fallo con !BIT! kbps. | |||
echo ERROR FFMPEG CON BITRATE !BIT!>>"%LOG%" | |||
echo. | |||
set "OK=0" | |||
exit /b 0 | |||
) | |||
if not exist "!TEMP!" ( | |||
echo. | |||
echo ERROR: No se creo archivo temporal. | |||
echo ERROR: NO SE CREO TEMP>>"%LOG%" | |||
echo. | |||
set "OK=0" | |||
exit /b 0 | |||
) | |||
for %%S in ("!TEMP!") do set "SIZE=%%~zS" | |||
set /a SIZE_MB=!SIZE!/1048576 | |||
echo Tamano generado: !SIZE_MB! MB | |||
echo SIZE_BYTES_BITRATE_!BIT!: !SIZE!>>"%LOG%" | |||
if !SIZE! LEQ %LIMITE_BYTES% ( | |||
move /y "!TEMP!" "!SALIDA!" >nul | |||
echo. | |||
echo Correcto. Archivo menor a 64 MB. | |||
echo BITRATE_FINAL: !BIT! kbps>>"%LOG%" | |||
echo. | |||
set "OK=1" | |||
exit /b 0 | |||
) else ( | |||
echo. | |||
echo Todavia pesa mas de 64 MB. Bajando calidad... | |||
echo. | |||
del /q "!TEMP!" >nul 2>nul | |||
set "OK=0" | |||
exit /b 0 | |||
) | |||
rem ============================================================ | |||
rem FINAL GENERAL | |||
rem ============================================================ | |||
:fin_conversion | |||
echo. | |||
echo ============================================================ | |||
echo PROCESO TERMINADO | |||
echo ============================================================ | echo ============================================================ | ||
echo. | echo. | ||
Revisión del 13:32 8 jul 2026
Programa BAT
- Convertir_MP4_a_MP3.bat - - - Youtube Bajar Videos <<<--- complemento
@echo off
setlocal EnableExtensions
rem ============================================================
rem CONVERTIDOR AUTOMATICO DE MP4 A MP3
rem ============================================================
rem
rem Usa FFmpeg para extraer el audio de videos MP4
rem y convertirlo a MP3.
rem
rem MODO 1:
rem Arrastra uno o varios archivos MP4 encima de este BAT.
rem
rem MODO 2:
rem Si abres el BAT con doble clic, convierte todos los MP4 de:
rem E:\00_APP\00_YOUTUBE_Videos\Videos_Descargados
rem
rem Los MP3 se guardan en:
rem E:\00_APP\00_YOUTUBE_Videos\MP3_Convertidos
rem
rem Calidad:
rem MP3 VBR alta calidad para musica: -q:a 2
rem ============================================================
rem ============================================================
rem RUTAS PRINCIPALES
rem ============================================================
set "BASE=E:\00_APP\00_YOUTUBE_Videos"
set "FFMPEG=%BASE%\yt-dlp"
set "ORIGEN=%BASE%\Videos_Descargados"
set "DESTINO=%BASE%\MP3_Convertidos"
set "LOG=%BASE%\registro_conversion_mp3.txt"
rem ============================================================
rem CREAR CARPETA DE DESTINO
rem ============================================================
if not exist "%DESTINO%" (
mkdir "%DESTINO%"
)
rem ============================================================
rem VERIFICAR FFMPEG
rem ============================================================
if not exist "%FFMPEG%\ffmpeg.exe" (
echo.
echo ============================================================
echo ERROR: NO SE ENCONTRO FFMPEG
echo ============================================================
echo.
echo Archivo esperado:
echo "%FFMPEG%\ffmpeg.exe"
echo.
pause
exit /b 1
)
rem ============================================================
rem MOSTRAR INFORMACION
rem ============================================================
cls
echo ============================================================
echo CONVERTIDOR DE MP4 A MP3
echo ============================================================
echo.
echo FFmpeg: %FFMPEG%\ffmpeg.exe
echo Origen: %ORIGEN%
echo Destino: %DESTINO%
echo Calidad: MP3 VBR alta calidad para musica
echo.
echo Fecha: %date%
echo Hora: %time%
echo.
echo ============================================================
echo.
rem ============================================================
rem REGISTRAR INICIO
rem ============================================================
echo.>>"%LOG%"
echo ============================================================>>"%LOG%"
echo INICIO: %date% %time%>>"%LOG%"
echo ORIGEN: %ORIGEN%>>"%LOG%"
echo DESTINO: %DESTINO%>>"%LOG%"
echo CALIDAD: MP3 VBR -q:a 2>>"%LOG%"
echo ============================================================>>"%LOG%"
rem ============================================================
rem MODO 1: ARCHIVOS ARRASTRADOS AL BAT
rem ============================================================
if not "%~1"=="" (
echo Modo: archivos arrastrados al BAT
echo.
:loop_arrastrados
if "%~1"=="" goto fin_conversion
call :convertir "%~1"
shift
goto loop_arrastrados
)
rem ============================================================
rem MODO 2: CONVERTIR TODOS LOS MP4 DE LA CARPETA ORIGEN
rem ============================================================
echo Modo: convertir todos los MP4 de la carpeta origen
echo.
if not exist "%ORIGEN%\*.mp4" (
echo.
echo ============================================================
echo NO SE ENCONTRARON ARCHIVOS MP4
echo ============================================================
echo.
echo Carpeta revisada:
echo "%ORIGEN%"
echo.
echo Puedes cambiar la ruta ORIGEN dentro de este BAT.
echo.
pause
exit /b 0
)
for %%F in ("%ORIGEN%\*.mp4") do (
call :convertir "%%~fF"
)
goto fin_conversion
rem ============================================================
rem FUNCION: CONVERTIR ARCHIVO
rem ============================================================
:convertir
set "ARCHIVO=%~1"
set "NOMBRE=%~n1"
set "SALIDA=%DESTINO%\%NOMBRE%.mp3"
echo ------------------------------------------------------------
echo Convirtiendo:
echo "%ARCHIVO%"
echo.
echo ARCHIVO: "%ARCHIVO%">>"%LOG%"
if exist "%SALIDA%" (
echo Ya existe el MP3. Se omite:
echo "%SALIDA%"
echo OMITIDO, YA EXISTE: "%SALIDA%">>"%LOG%"
echo.
exit /b 0
)
"%FFMPEG%\ffmpeg.exe" ^
-hide_banner ^
-i "%ARCHIVO%" ^
-vn ^
-map 0:a:0 ^
-codec:a libmp3lame ^
-q:a 2 ^
"%SALIDA%"
if "%ERRORLEVEL%"=="0" (
echo.
echo MP3 creado correctamente:
echo "%SALIDA%"
echo OK: "%SALIDA%">>"%LOG%"
) else (
echo.
echo ERROR al convertir:
echo "%ARCHIVO%"
echo ERROR: "%ARCHIVO%">>"%LOG%"
)
echo.
exit /b 0
rem ============================================================
rem FINAL
rem ============================================================
:fin_conversion
echo.
echo ============================================================
echo CONVERSION TERMINADA
echo ============================================================
echo.
echo Carpeta de salida:
echo "%DESTINO%"
echo.
echo Fecha final: %date%
echo Hora final: %time%
echo ============================================================
echo FIN: %date% %time%>>"%LOG%"
echo ============================================================>>"%LOG%"
echo.
pause
endlocal
MP3 - Compacto
- Convertir_MP4_a_MP3_WikiFSF_64MB.bat
@echo off
setlocal EnableExtensions EnableDelayedExpansion
rem ============================================================
rem CONVERTIDOR AUTOMATICO DE MP4 A MP3 PARA WIKIFSF
rem ============================================================
rem
rem Objetivo:
rem Crear archivos MP3 menores a 64 MB para poder subirlos a WikiFSF.
rem
rem MODO 1:
rem Arrastra uno o varios archivos MP4 encima de este BAT.
rem
rem MODO 2:
rem Si abres el BAT con doble clic, convierte todos los MP4 de:
rem E:\00_APP\00_YOUTUBE_Videos\Videos_Descargados
rem
rem Los MP3 se guardan en:
rem E:\00_APP\00_YOUTUBE_Videos\MP3_WikiFSF_64MB
rem
rem Estrategia:
rem 1. Calcula la duracion del audio con ffprobe.
rem 2. Elige un bitrate aproximado para quedar debajo de 60 MB.
rem 3. Convierte a MP3 mono.
rem 4. Verifica que el archivo pese menos de 64 MB.
rem 5. Si pesa mas, baja calidad y vuelve a intentar.
rem ============================================================
rem ============================================================
rem RUTAS PRINCIPALES
rem ============================================================
set "BASE=E:\00_APP\00_YOUTUBE_Videos"
set "FFMPEG=%BASE%\yt-dlp"
set "ORIGEN=%BASE%\Videos_Descargados"
set "DESTINO=%BASE%\MP3_WikiFSF_64MB"
set "LOG=%BASE%\registro_conversion_mp3_wikifsf.txt"
rem ============================================================
rem LIMITE DE TAMANO
rem ============================================================
rem 64 MB seguros para WikiFSF.
rem Se usa 64,000,000 bytes para dejar margen practico.
rem El calculo inicial apunta a 60,000,000 bytes.
set "LIMITE_BYTES=64000000"
set "OBJETIVO_BYTES=60000000"
rem ============================================================
rem CREAR CARPETA DE DESTINO
rem ============================================================
if not exist "%DESTINO%" (
mkdir "%DESTINO%"
)
rem ============================================================
rem VERIFICAR FFMPEG
rem ============================================================
if not exist "%FFMPEG%\ffmpeg.exe" (
echo.
echo ============================================================
echo ERROR: NO SE ENCONTRO FFMPEG
echo ============================================================
echo.
echo Archivo esperado:
echo "%FFMPEG%\ffmpeg.exe"
echo.
pause
exit /b 1
)
if not exist "%FFMPEG%\ffprobe.exe" (
echo.
echo ============================================================
echo ERROR: NO SE ENCONTRO FFPROBE
echo ============================================================
echo.
echo Archivo esperado:
echo "%FFMPEG%\ffprobe.exe"
echo.
pause
exit /b 1
)
rem ============================================================
rem MOSTRAR INFORMACION
rem ============================================================
cls
echo ============================================================
echo CONVERTIDOR MP4 A MP3 PARA WIKIFSF - 64 MB
echo ============================================================
echo.
echo FFmpeg: %FFMPEG%\ffmpeg.exe
echo FFprobe: %FFMPEG%\ffprobe.exe
echo Origen: %ORIGEN%
echo Destino: %DESTINO%
echo Limite: 64 MB maximo
echo Objetivo: 60 MB aprox. para margen de seguridad
echo Formato: MP3 mono
echo.
echo Fecha: %date%
echo Hora: %time%
echo.
echo ============================================================
echo.
rem ============================================================
rem REGISTRAR INICIO
rem ============================================================
echo.>>"%LOG%"
echo ============================================================>>"%LOG%"
echo INICIO: %date% %time%>>"%LOG%"
echo ORIGEN: %ORIGEN%>>"%LOG%"
echo DESTINO: %DESTINO%>>"%LOG%"
echo LIMITE_BYTES: %LIMITE_BYTES%>>"%LOG%"
echo OBJETIVO_BYTES: %OBJETIVO_BYTES%>>"%LOG%"
echo ============================================================>>"%LOG%"
rem ============================================================
rem MODO 1: ARCHIVOS ARRASTRADOS AL BAT
rem ============================================================
if not "%~1"=="" (
echo Modo: archivos arrastrados al BAT
echo.
:loop_arrastrados
if "%~1"=="" goto fin_conversion
call :convertir "%~1"
shift
goto loop_arrastrados
)
rem ============================================================
rem MODO 2: CONVERTIR TODOS LOS MP4 DE LA CARPETA ORIGEN
rem ============================================================
echo Modo: convertir todos los MP4 de la carpeta origen
echo.
if not exist "%ORIGEN%\*.mp4" (
echo.
echo ============================================================
echo NO SE ENCONTRARON ARCHIVOS MP4
echo ============================================================
echo.
echo Carpeta revisada:
echo "%ORIGEN%"
echo.
echo Tambien puedes arrastrar un MP4 encima de este BAT.
echo.
pause
exit /b 0
)
for %%F in ("%ORIGEN%\*.mp4") do (
call :convertir "%%~fF"
)
goto fin_conversion
rem ============================================================
rem FUNCION PRINCIPAL: CONVERTIR ARCHIVO
rem ============================================================
:convertir
set "ARCHIVO=%~1"
set "NOMBRE=%~n1"
set "SALIDA=%DESTINO%\%NOMBRE%_WikiFSF_64MB.mp3"
set "TEMP=%DESTINO%\%NOMBRE%_TEMP_WikiFSF.mp3"
set "OK=0"
echo ------------------------------------------------------------
echo Archivo:
echo "!ARCHIVO!"
echo.
echo ARCHIVO: "!ARCHIVO!">>"%LOG%"
if exist "!SALIDA!" (
for %%S in ("!SALIDA!") do set "SIZE_EXISTE=%%~zS"
if !SIZE_EXISTE! LEQ %LIMITE_BYTES% (
echo Ya existe un MP3 valido menor a 64 MB. Se omite:
echo "!SALIDA!"
echo OMITIDO, YA EXISTE Y ES MENOR A 64 MB: "!SALIDA!">>"%LOG%"
echo.
exit /b 0
) else (
echo Existe un MP3, pero pesa mas de 64 MB. Se reconstruira:
echo "!SALIDA!"
echo BORRANDO MP3 MAYOR A 64 MB: "!SALIDA!">>"%LOG%"
del /q "!SALIDA!" >nul 2>nul
)
)
rem ============================================================
rem OBTENER DURACION CON FFPROBE
rem ============================================================
set "DURACION="
for /f "usebackq tokens=*" %%D in (`"%FFMPEG%\ffprobe.exe" -v error -show_entries format^=duration -of default^=noprint_wrappers^=1:nokey^=1 "!ARCHIVO!"`) do (
set "DURACION=%%D"
)
if not defined DURACION (
set "DURACION=0"
)
echo Duracion detectada: !DURACION! segundos
echo DURACION: !DURACION!>>"%LOG%"
rem ============================================================
rem CALCULAR BITRATE MAXIMO APROXIMADO
rem ============================================================
rem Formula aproximada:
rem bitrate_kbps = objetivo_bytes * 8 / 1000 / duracion_segundos
rem
rem Luego se elige una calidad de esta lista:
rem 128, 112, 96, 80, 64, 56, 48, 40, 32, 24, 16 kbps
rem ============================================================
set "MAXK=64"
for /f %%K in ('powershell -NoProfile -Command "$d=[double]::Parse('!DURACION!',[Globalization.CultureInfo]::InvariantCulture); if($d -le 0){64}else{[math]::Floor((%OBJETIVO_BYTES%*8/1000)/$d)}"') do (
set "MAXK=%%K"
)
if not defined MAXK (
set "MAXK=64"
)
set "STARTBIT=16"
for %%B in (128 112 96 80 64 56 48 40 32 24 16) do (
if !MAXK! GEQ %%B (
if "!STARTBIT!"=="16" (
set "STARTBIT=%%B"
)
)
)
echo Bitrate maximo calculado: !MAXK! kbps
echo Bitrate inicial elegido: !STARTBIT! kbps
echo MAXK: !MAXK!>>"%LOG%"
echo STARTBIT: !STARTBIT!>>"%LOG%"
echo.
rem ============================================================
rem INTENTOS DE CONVERSION
rem ============================================================
rem Inicia con el bitrate calculado.
rem Si el resultado pesa mas de 64 MB, baja de calidad.
rem ============================================================
for %%B in (128 112 96 80 64 56 48 40 32 24 16) do (
if %%B LEQ !STARTBIT! (
call :intentar_bitrate %%B
if "!OK!"=="1" (
goto conversion_exitosa
)
)
)
rem ============================================================
rem SI NINGUN INTENTO FUNCIONO
rem ============================================================
echo.
echo ============================================================
echo NO SE LOGRO CREAR UN MP3 MENOR A 64 MB
echo ============================================================
echo.
echo El archivo es demasiado largo incluso con calidad muy baja.
echo Recomendacion:
echo - Dividir el audio en partes.
echo - Usar OGG/OPUS si tu WikiFSF lo permite.
echo - Subirlo externo y enlazarlo.
echo.
echo ERROR: NO SE LOGRO MENOR A 64 MB: "!ARCHIVO!">>"%LOG%"
echo.
exit /b 0
rem ============================================================
rem CONVERSION EXITOSA
rem ============================================================
:conversion_exitosa
for %%S in ("!SALIDA!") do set "FINAL_SIZE=%%~zS"
set /a FINAL_MB=!FINAL_SIZE!/1048576
echo.
echo ============================================================
echo MP3 CREADO PARA WIKIFSF
echo ============================================================
echo.
echo Archivo:
echo "!SALIDA!"
echo.
echo Tamano final aproximado:
echo !FINAL_MB! MB
echo.
echo Estado:
echo LISTO PARA SUBIR A WIKIFSF
echo ============================================================
echo OK FINAL: "!SALIDA!">>"%LOG%"
echo TAMANO_FINAL_BYTES: !FINAL_SIZE!>>"%LOG%"
echo.
exit /b 0
rem ============================================================
rem FUNCION: INTENTAR CON UN BITRATE
rem ============================================================
:intentar_bitrate
set "BIT=%~1"
set "AR=44100"
if !BIT! LEQ 64 set "AR=32000"
if !BIT! LEQ 48 set "AR=22050"
if !BIT! LEQ 24 set "AR=16000"
set "OK=0"
if exist "!TEMP!" (
del /q "!TEMP!" >nul 2>nul
)
echo Intentando conversion:
echo Bitrate: !BIT! kbps
echo Sample rate: !AR! Hz
echo.
echo INTENTO BITRATE: !BIT! kbps, AR: !AR!>>"%LOG%"
"%FFMPEG%\ffmpeg.exe" ^
-hide_banner ^
-y ^
-i "!ARCHIVO!" ^
-vn ^
-map 0:a:0 ^
-ac 1 ^
-ar !AR! ^
-codec:a libmp3lame ^
-b:a !BIT!k ^
"!TEMP!"
if errorlevel 1 (
echo.
echo ERROR: FFmpeg fallo con !BIT! kbps.
echo ERROR FFMPEG CON BITRATE !BIT!>>"%LOG%"
echo.
set "OK=0"
exit /b 0
)
if not exist "!TEMP!" (
echo.
echo ERROR: No se creo archivo temporal.
echo ERROR: NO SE CREO TEMP>>"%LOG%"
echo.
set "OK=0"
exit /b 0
)
for %%S in ("!TEMP!") do set "SIZE=%%~zS"
set /a SIZE_MB=!SIZE!/1048576
echo Tamano generado: !SIZE_MB! MB
echo SIZE_BYTES_BITRATE_!BIT!: !SIZE!>>"%LOG%"
if !SIZE! LEQ %LIMITE_BYTES% (
move /y "!TEMP!" "!SALIDA!" >nul
echo.
echo Correcto. Archivo menor a 64 MB.
echo BITRATE_FINAL: !BIT! kbps>>"%LOG%"
echo.
set "OK=1"
exit /b 0
) else (
echo.
echo Todavia pesa mas de 64 MB. Bajando calidad...
echo.
del /q "!TEMP!" >nul 2>nul
set "OK=0"
exit /b 0
)
rem ============================================================
rem FINAL GENERAL
rem ============================================================
:fin_conversion
echo.
echo ============================================================
echo PROCESO TERMINADO
echo ============================================================
echo.
echo Carpeta de salida:
echo "%DESTINO%"
echo.
echo Fecha final: %date%
echo Hora final: %time%
echo ============================================================
echo FIN: %date% %time%>>"%LOG%"
echo ============================================================>>"%LOG%"
echo.
pause
endlocal