Moin alle zusammen,
ich würde gerne die Tonspuren einer Serie mit 52 Folgen von der Lautstärke her
normalisieren und die Folgen mit der neuen Tonspur zusammenfügen alles in einem Arbeitsschritt.
Ich habe dafür ein Skript gefunden und leicht angepasst. Das Skript arbeitet in drei schritten: Zuerst wird via drag and drop das Video bzw. die Tonspur auf das Skript gezogen und mit dem FFmpeg-Befehl "loudnorm" analysiert, das ergebnis wird in einer Textdatei geschrieben. Anschließend wird die Textdatei ausgewertet und eine neue Tonspur erzeugt. Im weiteren Schritt wird mit mkvmerge die neue Tonspur und das Video zusammengefügt. Die alten Dateien werden anschließend durch das Skript gelöscht, so das am Ende nur noch die verarbeitete Videodatei übrig bleibt.
Das Skript funktioniert soweit ganz gut, solange es sich nur um eine Videodatei handelt! Bei mehreren Videodateien scheitert es aber, da für jede markierte Videodatei die via drag and drop aufs Skript raufgezogen wird eine Textdatei erzeugt wird bevor das abarbeiten beginnt. Das heißt, bei 52 Folgen analysiert er die erste Folge 52 mal und gibt 52 mal die gleiche Textdatei aus bevor das abarbeiten beginnt und dass wiederholt das Skript bei jeder weiteren Folge.
Leider komme ich mit meinem Wissen nicht mehr weiter, steh auf dem Schlauch... Wäre dankbar wenn jemand eine Lösung für mein Problem hat. MfG Neugier
SET mkvmerge="%~dp0\mkvmerge\mkvmerge.exe"
PUSHD %~dp1
if [%1]==[] goto :eof
:loop
@for %%i in (%*) do ffmpeg.exe -i %1 -filter_complex "[0:a]loudnorm=I=-16:TP=-1.5:LRA=11:print_format=summary" -f null x 2>%1.txt
@for /f "tokens=3" %%a in ('findstr /C:"Input Integrated" %1.txt') do (set II=%%a)
echo %II% is the Input Integrated
@for /f "tokens=4" %%a in ('findstr /C:"Input True Peak" %1.txt') do (set ITP=%%a)
echo %ITP% is the Input True Peak
@for /f "tokens=3" %%a in ('findstr /C:"Input LRA" %1.txt') do (set ILRA=%%a)
echo %ILRA% is the Input LRA
@for /f "tokens=3" %%a in ('findstr /C:"Input Threshold" %1.txt') do (set IT=%%a)
echo %IT% is the Input Threshold
@for /f "tokens=3" %%a in ('findstr /C:"Output Integrated" %1.txt') do (set OI=%%a)
echo %OI% is the Output Integrated
@for /f "tokens=4" %%a in ('findstr /C:"Output True Peak" %1.txt') do (set OTP=%%a)
echo %OTP% is the Output True Peak
@for /f "tokens=3" %%a in ('findstr /C:"Output LRA" %1.txt') do (set OLRA=%%a)
echo %OLRA% is the Output LRA
@for /f "tokens=3" %%a in ('findstr /C:"Output Threshold" %1.txt') do (set OT=%%a)
echo %OT% is the Output Threshold
@for /f "tokens=3" %%a in ('findstr /C:"Target Offset" %1.txt') do (set TO=%%a)
echo %TO% is the Target Offset
ffmpeg.exe -i %1 -af loudnorm=linear=true:I=-16:tp=-1.5:lra=11:measured_I=%II%:measured_LRA=%ILRA%:measured_tp=%ITP%:measured_thresh=%IT%:offset=%TO%:print_format=summary "%~n1.ac3" && del *.txt
if exist "%~n1.ac3" (
%mkvmerge% -o "neu\%~n1.mkv" -a !1 %1 "%~n1.ac3" && del %1 "%~n1.ac3"
)
else (
%mkvmerge% -o "neu\%~n1.mkv" -a !1 %1 && del %1
)
shift
if not [%1]==[] goto loop
Alles anzeigen