Frage von vs:Hallo zusammen,
ich habe hier einige tausend Dateien mit dem gleichen Problem: Der Audio-Spitzenlevel ist stark unterschiedlich, genauso wie der Dynamikumfang. Außerdem sollten alle Videos einen 4:3-Frame haben (Letterbox oder Fullframe), jedoch sind einige der 4:3-Letterbox-Dateien fälschlicherweise mit 16:9 geflaggt.
DVDPatcher scheidet aus. mehrere tausend Dateien einzeln anklicken und patchen geht nicht.
Nun war ich stolz wie Oskar, alles in folgendem Workflow abfrühstücken zu können:
Datei normall.bat
@echo off
for %%a in (*.mpg) do normalize %%a
Datei normalize.bat (wird aus der normall aufgerufen)
@echo off
Echo -------------File: "%1"
Echo -------------Step 1: Aspect Ratio
c:\normtest\mpgtx.exe -s -A2 "%1" -b chunk0
Echo -------------Step 2: Demultiplex
c:\normtest\ffmpeg -i chunk0.mpg -vcodec copy -f mpeg2video "temp\chunk0.m2v" -acodec copy -f mp2 "temp\chunk0.mp2"
Echo -------------Step 3: Dynamic compression and normalization
c:\normtest\BeSweet.exe -core( -input "temp\chunk0.mp2" -output "temp\chunk0norm.mp2" ) -azid( -n1 -c normal -L -3db --maximize ) -ota( -g max ) -boost( /b2=5 ) -2lame( -s 48 -b 224 -m s)
Echo -------------Step 4: Re-Multiplex, set aspect ratio:
c:\normtest\ffmpeg -i "temp\chunk0.m2v" -i "temp\chunk0norm.mp2" -acodec copy -vcodec copy -aspect 4:3 -f mpeg "output\chunk0.mpg"
Echo -------------Step 5: Cleanup und Rename
del chunk0.mpg
del temp\chunk0.m2v
del temp\chunk0.mp2
del temp\chunk0norm.mp2
cd output
ren chunk0.mpg "%1"
cd ..
Echo -------------Finished
Ich weiß, Dirty Trick und der Dynamikkompressor in BeSweet könnte besser sein. Aber in diesem speziellen Anwendungsfall ausnahmsweise mal ausreichend.
Problem 1: Bei großen Dateien klappt mpgtx die Hufe hoch, nachdem es offenbar versucht, mehrere Gigabyte große Dateien komplett in den RAM zu laden.
Problem 2: Dateinamen mit Sonderzeichen und Leerzeichen werden nicht korrekt verarbeitet, weder mit Aufruf "%1" noch mit Aufruf %1 ohne Anführungszeichen.
Problem 2 werde ich wohl lösen können, indem ich einen kleinen C-Code statt des Batch als aufrufende Instanz verwende.
Problem 1 bleibt. Ich freue mich also über alle Tips zum Thema Aspect Ratio patchen auf der Kommandozeile (der Schalter "-aspect 4:3" in ffmpeg bleibt wirkungslos im Copy-Modus)
Viele Grüße und Danke im Voraus.
Antwort von tommyb:
Problem 2:
Das ist normal und ließe sich nur ändern, wenn man die Datei zu einem anderen Zeichensatz konvertiert. Womöglich bearbeitest Du die Batch-Datei im Editor? Nun denn, es gibt ein Programm welches sich "Stringconverter" nennt.
http://www.gbordier.com/gbtools/stringconverter.htm
Wenn man die Batch-Datei damit zu OEM konvertiert, funktionieren auch Umlaute und bestimmte Sonderzeichen. Wirklich praktikabel ist es allerdings nicht (nicht empfehlenswert zumindest).
Du könntest auch mit Massen-Renamern wie AntRenamer die ganzen ö und ü zu OEUMLAUT UEUMLAUT usw. umbenennen. Später kannst Du UEUMLAUT zurück zu ö ersetzen - mittels AntRenamer.
Problem 1:
Ja, ffmpeg ignoriert irgendwie alle möglicher Schalter die in der Doc vermerkt sind. Selbst das Ändern der Halbbildreihenfolge funktiniert einfach nicht.
Hast Du es schon mal mit dem Mencoder versucht? Den gibt es zusammen mit MeGUI im Paket.
Noch ein Tipp:
Für eine durchgehend identische Lautstärke eignet sich ReplayGain. Speziell für MP3, Vorbis und AAC gibt es kleine Tools mit denen man den ReplayGain Wert fest in die Datei "patchen" kann. Das abspielende Gerät muss es nur unterstützen.
Viel sicherer ist aber die Datei direkt zu verändern. Da Du ja sowieso den Ton rekomprimierst (SoX ist übrigens der meiner Meinung nach bessere, wenn auch komplexere Weg als BeSweet) könntest Du hinterher genau so gut mit "WaveGain" die Lautstärke auf den 89dB Durchschnitt anheben/absenken lassen.
WaveGain gibt es hier (und es funktioniert wirklich gut so lange die Dateien eine ähnliche Lautstärkekompression haben):
http://www.rarewares.org/others.php
Antwort von vs:
Danke erst mal. Möglicherweise bin ich nun einen großen Schritt weiter.
Zu Problem 2, das mit den Dateinamen: Das Problem war die Übergabe von Dateinamen mit Leerzeichen und Sonderzeichen. Der Teufel steckte im Detail: In der normall.bat muss es nicht >... do normalize %%a<sondern>... do normalize "%%a"< heißen - und in der normalize.bat kann man dann auf die Anführungszeichen um das %1 herum verzichten. Jetzt werden alle Dateien konvertiert.
Die große Datei die ich zum Testen verwendet habe, ist defekt und wird auch von ProjectX nicht vollständig demultiplexed. Media Player Classic ist scheinbar tolerant genug, sie abzuspielen. Also war der Lösungsansatz von Problem 1 mit mpgtx schon richtig. Weitere Tests stehen noch aus.
ffmpeg ignoriert die Schalter im Copy-Modus da es den Stream dort nicht patcht. Gleiches gilt aber auch für mencoder. Genauso wirkungslos wie der Aspect-Schalter im Copy-Modus von ffmpeg ist:
C:\Programme\Kingswood_Studios\SimpleMencoderShellGUI\mencoder.exe "%1" -o chunk0.mpg -oac copy -ovc copy -of mpeg -lavcopts aspect=4/3
Der Ton soll schon rekomprimiert werden, da die Dateien später durch einen Hardware-Decoder laufen, dem ich in Sachen Gain-Angaben im Header etwas misstraue. Ob nur normalisieren oder auch Dynamikkompression muss ich noch im Feld testen, erst einmal ging es darum, für die beiden Probleme überhaupt eine gangbare automatisiere Lösung zu finden. Jetzt kommt das Finetuning.
Da ich mpgtx immer noch ein wenig misstraue... Wenn jemand Command Line Alternativen zu ReStream oder DVDPatcher kennt, immer her damit.