[FFmpeg-user] How to create error log file ffmpeg Loudnorm?
Ferdi Scholten
ferdi at sttc-nlp.nl
Wed Apr 24 09:16:09 EEST 2024
On 24-04-2024 00:57, CMG DiGiTaL wrote:
> Em sáb., 24 de fev. de 2024 às 17:25, Carl Zwanzig<cpz at tuunq.com> escreveu:
>
>> Always start by posting the complete ffmpeg command and unedited output,
>> that way we don't have to guess about what the script is doing.
>>
>> z!
>> _______________________________________________
>>
>> My bat file will read several mp3 audios in a folder and normalize the
> LUFS, saving the files in another folder. I wanted to save loglevel 16 of
> these files in another folder on my desktop called Logs
>
> My code:
>
> md "C:\Users\%username%\Desktop\Normalizando_lufs"
> pushd "%Userprofile%\Desktop\µudios LUFS"
> FOR /F "delims=" %%a in ('where .:*.mp3 ^|findstr /vi "_LOUDNORM _EBU"')
> DO (
> SET "filename=%%~na"
> ffmpeg -hide_banner -i "%%a" -af "[0:a]loudnorm=print_format=summary" -f
> null NUL 2> "%%~na.log"
> @FOR /F "tokens=3" %%b IN ('FINDSTR /C:"Input Integrated" "%%~na.log"')
> DO (SET II=%%b)
> @FOR /F "tokens=4" %%b IN ('FINDSTR /C:"Input True Peak" "%%~na.log"') DO
> (SET ITP=%%b)
> @FOR /F "tokens=3" %%b IN ('FINDSTR /C:"Input LRA" "%%~na.log"') DO (SET
> ILRA=%%b)
> @FOR /F "tokens=3" %%b IN ('FINDSTR /C:"Input Threshold" "%%~na.log"') DO
> (SET IT=%%b)
> @FOR /F "tokens=3" %%b IN ('FINDSTR /C:"Target Offset" "%%~na.log"') DO
> (SET TO=%%b)
> DEL "%%~na.log"
> SETLOCAL ENABLEDELAYEDEXPANSION
> REM ECHO !II! Input Integrated
> REM ECHO !ITP! Input True Peak
> REM ECHO !ILRA! Input LRA
> REM ECHO !IT! Input Threshold
> REM ECHO !TO! Target Offset
> FOR /F "tokens=1,2 delims=," %%b IN ('ffprobe -v 0 -select_streams a
> -show_entries "stream=bit_rate,sample_rate" -of "csv=p=0"
> "!filename!.mp3"') DO (
> ffmpeg -hide_banner *-report file=test.log:level=16* -i "!filename!.mp3"
> -af
> "loudnorm=linear=true:I=!_vLUF!:LRA=11:tp=!_vPEAK!:measured_I=!II!:measured_LRA=!ILRA!:measured_tp=!ITP!:measured_thresh=!IT!:offset=!TO!:print_format=summary"
> -c:v copy -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v
> comment="Cover (front)" -acodec mp3 -b:a %%c -ar:a %%b
> "C:\Users\%username%\Desktop\Normalizando_lufs\!filename!.mp3"
> )
> ENDLOCAL
> )
>
> Using the -report command, the bat is canceled and a log is generated in
> the folder in the current directory, see the -report command message in the
> log:
>
> Successfully opened the file.
> Parsing a group of options: output url file=test.log:level=16.
> Successfully parsed a group of options.
> Opening an output file: file=test.log:level=16.
> [NULL @ 000001bcd0518640] Unable to find a suitable output format for
> 'file=test.log:level=16'
> file=test.log:level=16: Invalid argument
>
>
> thanks
> _______________________________________________
>
*-report file=test.log:level=16* the character * on the commandline
causes ffmpeg to look at this as a outputfile specification to put
decoded results in, as nothing is specified about how to decode it it
tries to guess what codecs to use on the extension. Naturally this does
not work. Easiest way to get your desired result is to set the logfile
creation as an environment variable in the beginning of your script your
script and remove it from the ffmpeg commandline like this:
FFREPORT=file=test.log:level=16 md "C:\Users\%username%\Desktop\Normalizando_lufs"
pushd "%Userprofile%\Desktop\µudios LUFS"
FOR /F "delims=" %%a in ('where .:*.mp3 ^|findstr /vi "_LOUDNORM _EBU"')
DO (
SET "filename=%%~na"
ffmpeg -hide_banner -i "%%a" -af "[0:a]loudnorm=print_format=summary" -f
null NUL 2> "%%~na.log"
@FOR /F "tokens=3" %%b IN ('FINDSTR /C:"Input Integrated" "%%~na.log"')
DO (SET II=%%b)
@FOR /F "tokens=4" %%b IN ('FINDSTR /C:"Input True Peak" "%%~na.log"') DO
(SET ITP=%%b)
@FOR /F "tokens=3" %%b IN ('FINDSTR /C:"Input LRA" "%%~na.log"') DO (SET
ILRA=%%b)
@FOR /F "tokens=3" %%b IN ('FINDSTR /C:"Input Threshold" "%%~na.log"') DO
(SET IT=%%b)
@FOR /F "tokens=3" %%b IN ('FINDSTR /C:"Target Offset" "%%~na.log"') DO
(SET TO=%%b)
DEL "%%~na.log"
SETLOCAL ENABLEDELAYEDEXPANSION
REM ECHO !II! Input Integrated
REM ECHO !ITP! Input True Peak
REM ECHO !ILRA! Input LRA
REM ECHO !IT! Input Threshold
REM ECHO !TO! Target Offset
FOR /F "tokens=1,2 delims=," %%b IN ('ffprobe -v 0 -select_streams a
-show_entries "stream=bit_rate,sample_rate" -of "csv=p=0"
"!filename!.mp3"') DO (
ffmpeg -hide_banner -i "!filename!.mp3"
-af
"loudnorm=linear=true:I=!_vLUF!:LRA=11:tp=!_vPEAK!:measured_I=!II!:measured_LRA=!ILRA!:measured_tp=!ITP!:measured_thresh=!IT!:offset=!TO!:print_format=summary"
-c:v copy -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v
comment="Cover (front)" -acodec mp3 -b:a %%c -ar:a %%b
"C:\Users\%username%\Desktop\Normalizando_lufs\!filename!.mp3"
)
ENDLOCAL
)
More information about the ffmpeg-user
mailing list