Filme und Medienstreams einfach konvertieren
ffmpeg als Lösung
Hallo Users,
Konvertierungstools gibt es reichlich, oft verlangen selbst die Programme mit Oberfläche mehr, als der "Durchschnitts"-User versteht.
Fast entsteht der Eindruck, dass selbst das produzierende Film-Gewerbe bei der Vielzahl der Verpackungs-Möglichkeiten nicht mehr "durchsieht".
Doch Dank der Freeware "ffmpeg" ist es möglich, sich die "Arbeit" ganz einfach zu machen!
Bevor gleich alle aufschreien: "ffmpeg" versteht ja nur Kommandozeile!
Doch es geht - ffmpeg kann es wirklich, man muss dem Programm nur sagen, was man will.
Dabei hilft das folgende Bat-File. Und in Verbindung mit einem Link auf diese Bat-File benötigt niemand besondere Kodierungs- oder BAT-Kenntnisse.
Speicher-Ort und Name für BAT und Link sind beliebig, einfach eine Datei oder einen Ordner auf den Link ziehen, fertig. Aber: Bitte den Hinweis beachten!
Derzeit sind im Auto-Betrieb folgende Eingangs-Formate implementiert: *.avi, *.flv, *.mpg, *.ps, *.ts, *.wmv
Per Einzel-Test können alle Dateien ausprobiert werden, deren EXT (Erweiterung) genau 3 Zeichen enthält - ffmpeg ist wirklich mächtig.
Wer will, kann auch per Aufruf: Bat-File "Input-Datei" "Parameter" Output-EXT spezielle Tests durchführen.
Die Output-EXT sollte genau 3 Zeichen enthalten.
Wer erst einmal einen Probelauf machen will, hängt an den Datei- oder Ordnernamen "_test" an (ohne Anführungszeichen).
Dann werden kurze Test-Files von ca. 30 s Länge erzeugt. Damit kann bereits die Qualität recht gut beurteilt werden.
Die Eingabe-Dateien (Input) werden natürlich nicht verändert oder gelöscht. Sie "landen" nur in dem Spezial-Ordner.
Die Hinweise stehen zwar bereits in der BAT, doch für die Schnell-Leser:
%ffmpeg%, %sox% und %mediainfo% sind als Variable in der start-set definiert. Diese enthält den Pfad inlusive Programm (z.B.: ...\bin\ffmpeg),
ebenso %weg% ein Ordner zum Sammeln der bearbeiteten Dateien bevor der letzte Lösch-Befehl kommt.
Wer das so nicht mag (extra BAT), kann diese Angaben mit oben "set"-zen.
Benötigt werden also die Freeware-Programme "ffmpeg", "SOX" und "MediaInfo", die per Internet-Suche schnell gefunden sind.
Am einfachsten das Paket Hybrid, dort erhältlich, herunterladen. Darin sind alle Programme enthalten.
Das Tool sagt also ffmpeg folgendes:
1. Name der zu bearbeitenden Datei(en)
2. Inhalt der Streams
3. Prozecc der verwendet werden soll
3.1. Einfaches Umlabeln (Containern) auf MP4 oder MKV oder, falls nur Audio, MP3
3.2. Trennen der Streams, umkodieren der Audiospur und zusammenfügen zu MP4
3.3. Trennen der Streams und zusammenfügen zu MKV
3.4. Komplett neu Umkodieren zu MKV
4. Erstellen von Output-Infos
5. Verschieben der Input-Datei oder Test-Files in den "Spezial-Papierkorb"
Der Link läßt die Wahl zwischen einer einzelnen Datei oder komplette Ordner samt Unterordner.
"_test" - mit Unterstrich, Schreibweise sonst ist es egal - erzeugt einen Probelauf, der ab der 5. Video-Minute beginnt.
Dank der eigenen tollen Programm-Routinen sorgt ffmpeg dafür, dass die Qualität nicht leidet und reichlich Platz gespart wird.
Die Zwei REM-Stellen haben folgenden Grund:
Zeile 90 - Pause, damit bei Bedarf die Hinweise von ffmpeg gelesen werden können.
Zeile 180 - IF, auf Wunsch mal ausprobieren. Dann den REM in Zeile 181 setzen!
Die Gewählte Einstellung (Zeile 181) bewirkt ein Umkodieren des Films, die Zeile 180 nur ein "Umlabeln"
Nun bitte ich um fleißiges Ausprobieren und Rückinfos, insbesondere zu gefundenen Codecs, damit ich diese einpflegen kann.
Verbesserungsvorschläge zum Skript-Ablauf freuen mich natürlich auch, dito, Fehlerhinweise.
Die geteste Umgebung: WinXP + SP3.
Doch dürfte das Bat-File sicherlich auch auf den anderen Win-Systemen laufen, auf denen auch ffmpeg es kann.
Ich danke für Eure Aufmerksamkeit.
max5moritz
Hallo Users,
Konvertierungstools gibt es reichlich, oft verlangen selbst die Programme mit Oberfläche mehr, als der "Durchschnitts"-User versteht.
Fast entsteht der Eindruck, dass selbst das produzierende Film-Gewerbe bei der Vielzahl der Verpackungs-Möglichkeiten nicht mehr "durchsieht".
Doch Dank der Freeware "ffmpeg" ist es möglich, sich die "Arbeit" ganz einfach zu machen!
Bevor gleich alle aufschreien: "ffmpeg" versteht ja nur Kommandozeile!
Doch es geht - ffmpeg kann es wirklich, man muss dem Programm nur sagen, was man will.
Dabei hilft das folgende Bat-File. Und in Verbindung mit einem Link auf diese Bat-File benötigt niemand besondere Kodierungs- oder BAT-Kenntnisse.
Speicher-Ort und Name für BAT und Link sind beliebig, einfach eine Datei oder einen Ordner auf den Link ziehen, fertig. Aber: Bitte den Hinweis beachten!
Derzeit sind im Auto-Betrieb folgende Eingangs-Formate implementiert: *.avi, *.flv, *.mpg, *.ps, *.ts, *.wmv
Per Einzel-Test können alle Dateien ausprobiert werden, deren EXT (Erweiterung) genau 3 Zeichen enthält - ffmpeg ist wirklich mächtig.
Wer will, kann auch per Aufruf: Bat-File "Input-Datei" "Parameter" Output-EXT spezielle Tests durchführen.
Die Output-EXT sollte genau 3 Zeichen enthalten.
Wer erst einmal einen Probelauf machen will, hängt an den Datei- oder Ordnernamen "_test" an (ohne Anführungszeichen).
Dann werden kurze Test-Files von ca. 30 s Länge erzeugt. Damit kann bereits die Qualität recht gut beurteilt werden.
Die Eingabe-Dateien (Input) werden natürlich nicht verändert oder gelöscht. Sie "landen" nur in dem Spezial-Ordner.
::Bat-File-Name: Media-Convert, Version: 0.99_2012-05-10
::Media-Container-File(s) in *.mp4 oder *.mkv oder *.mp3 umwandeln
::Unterstützte Eingangs-Formate mindestens siehe set "auto= / Alternativ per Einzelprobe testen / ffmpeg ist recht clever!
::Hinweis zu den Variablen %ffmpeg%, %sox% und %mediainfo% (Pfad+Programmename), im Programm-Paket "Hybrid"
::ist alles enthalten, sowie %weg% (Ordner, der als zentraler Spezial-Papierkorb dient).
::Diese werden durch den Aufruf von start-set gesetzt, d.h., beide BAT-File sollten im gleichen Verzeichnis sein.
::SOX dient dem Anheben der Lautstärke von ac3-Stream, da diese of zu leise sind
::Der Parameter "-t 30" (ohne Anführungszeichen) muss immer am Ende von %para% stehen, damit der Test-Lauf richtig funktioniert.
::Die Tests beginnen ab der 5. Video-Minute - eventuell set "start=-ss 00:05:00.000" anpassen.
::%para% "-sameq" - ffmpeg versucht, das Beste aus dem Input zu machen. Dieser Wert kann zu Testzwecken verändert werden.
::Die Input-Dateien werden nicht verändert oder gelöscht - diese oder die Test-Files befinden sich immer im "Spezial-Ordner"
::Entwurf und Layout by max5moritz
@echo off&setlocal enabledelayedexpansion
set "inex=flv"
set "input=%1"
set "para=-sameq"
set "start=-ss 00:05:00.000"
set "Verzeichnis=%~dp0"
set "auto=*.avi, *.flv, *.mpg, *.ps, *.ts, *.wmv"
if n%1==n goto help
set "parm1=-vcodec copy"&set "parm2=-acodec copy"
set "parmstd=%parm1% %parm2%"
echo "%input%" >%tmp%\input.tmp
find /n /i "_test" %tmp%\input.tmp
if errorlevel 1 set "para=%para%"&goto :weiter
set "para=%para% -t 30"
:weiter
del %tmp%\input.tmp
if not "%2"=="" (set "para=%2") ELSE set "para=%para%"
if "%para:~0,1%"=="-" (set "parm3=%para%") ELSE set "parm3=%para%"
if not "%3"=="" (set "outex=%3") ELSE set "outex=mkv"
echo %outex%>%tmp%\getlen.tmp
FOR %%i IN ("%tmp%\getlen.tmp") DO set /a "theLen=%%~zi-2"&del %tmp%\getlen.tmp
if "%theLen%"=="3" (set "outex=%3") ELSE set "outex=mkv"
echo Verzeichnis der Bat-Datei "%verzeichnis%"
if "%input:~1,1%"==":" (goto Abfrage1) ELSE goto Abfrage2
:Abfrage1
set "name=%input:~0,-4%"&set "inex=%input:~-4,4%"
if /I "%inex:~1,3%"==".ps" set "inex=%inex:~1,3%"&set "input=%input:~0,-3%"
if /I "%inex:~1,3%"==".ts" set "inex=%inex:~1,3%"&set "input=%input:~0,-3%"
if "%inex:~-3,1%%inex:~-1,1%"==".s" set "name=%input%"
goto :run
:Abfrage2
set "name=%input:~1,-5%"&set "inex=%input:~-5,4%"
if /I "%inex:~1,3%"==".ps" set "inex=%inex:~1,4%"&set "input=%input:~1,-4%"
if /I "%inex:~1,3%"==".ts" set "inex=%inex:~1,4%"&set "input=%input:~1,-4%"
if "%inex:~-3,1%%inex:~-1,1%"==".s" set "name=%input%"
goto :run
:run
if /I "%inex%"==".mkv" set "anzeig=Datei ist eine *.mkv"&goto ende
if /I "%inex%"==".mp3" set "anzeig=Datei ist eine *.mp3"&goto ende
call start-set
if not "%inex:~0,1%"=="." goto auto
:run-once
set "run=once
if "%inex:~-3,1%"=="." (set "inex=%inex:~1,2%") ELSE set "inex=%inex:~1,3%"
call :process
call :post-process
cls&set "anzeig=Process-once hat fertig"
goto ende
:auto
set "run=auto"&pushd "%input%"
FOR /r "%cd%" %%i IN (%auto%) DO (
set "input=%%i"
set "outex=mkv"
set "inex=!input:~-3,3!"&set "name=!input:~0,-4!"
if "!inex:~-3,1!!inex:~-1,1!"==".s" set "inex=!input:~-2,2!"&set "name=!input:~0,-3!"
set "parm=-vcodec copy -acodec copy"
echo aktuelles Verzeichnis ist "%cd%"
call :process
call :post-process
)
cls&set "anzeig=Process-auto hat fertig"
goto ende
:process
mode con cols=130 lines=63&cls&color 0F&echo.
echo --"!name!.!inex!"--
ping -n 5 localhost 1>nul 2>nul
call :suche
if "!bild!"=="mpeg1" call :process1
if "!ton!"=="ac3" call :process2
echo --"!name!.!inex!"--&echo.&title !inex! to !outex! with !parm!
if "%para:~-5,2%"=="-t" (%ffmpeg% %start% -i "!name!.!inex!" !parm! "!name!+.!outex!") ELSE %ffmpeg% -i "!name!.!inex!" !parm! "!name!+.!outex!"
REM pause
:process-info
cls&color 0E&echo.&echo MediaInfo werden geladen...
%mediainfo% -f "!name!+.!outex!">"!name!+.txt"
%mediainfo% -f "!name!+.!outex!"
echo.&echo Fenster schlieát in 8 Sekunden
ping -n 15 localhost 1>nul 2>nul
call :processend
goto :eof
:processend
mode con cols=75 lines=5&cls&color 0A&echo.
cls&color 0A&echo.&echo Dateien werden verschoben...
if "!run!"=="auto" if not "%para:~-5,2%"=="-t" move /y "!name!.*" "%weg%"
if "%para:~-5,2%"=="-t" (
move /y "!name!+.!outex!" "!name!_TEST.!outex!"
move /y "!name!+.txt" "!name!_TEST.txt"
ping -n 5 localhost 1>nul 2>nul
move /y "!name!_TEST.*" "%weg%"
)
if "!run!"=="auto" if exist "!name!-.*" move /y "!name!-.*" "%weg%"
goto :eof
:process1
set "outex=mp4"
echo --!name!--&echo.&title !inex! to !outex! with !parmstd! als mp3-process
if "%para:~-5,2%"=="-t" (%ffmpeg% %start% -i "!name!.!inex!" -vcodec copy -an "!name!-.mpeg") ELSE %ffmpeg% -i "!name!.!inex!" -vcodec copy -an "!name!-.mpeg"
if "%para:~-5,2%"=="-t" (%ffmpeg% %start% -i "!name!.!inex!" -vn -acodec libmp3lame -sameq "!name!-.mp3") ELSE %ffmpeg% -i "!name!.!inex!" -vn -acodec libmp3lame -sameq "!name!-.mp3"
%ffmpeg% -i "!name!-.mpeg" -i "!name!-.mp3" !parmstd! "!name!+.!outex!"
ping -n 8 localhost 1>nul 2>nul
set "run=auto"
goto :process-info
:process2
set "outex=mkv"
echo --!name!--&echo.&title !inex! to !outex! with !parmstd! als ac3-process
if "%para:~-5,2%"=="-t" (%ffmpeg% %start% -i "!name!.!inex!" -vcodec copy -an "!name!-.mp4") ELSE %ffmpeg% -i "!name!.!inex!" -vcodec copy -an "!name!-.mp4"
if "%para:~-5,2%"=="-t" (%ffmpeg% %start% -i "!name!.!inex!" -vn -acodec copy "!name!-.aac") ELSE %ffmpeg% -i "!name!.!inex!" -vn -acodec copy "!name!-.aac"
%ffmpeg% -y -i "!name!-.aac" -ac 6 -ar 48000 -acodec pcm_s16le -f wav - | %sox% -G --volume 2.5 -s -b 16 -c 6 -r 48000 -t raw - -t wav - | %ffmpeg% -y -i - -ab 576000 -ac 6 -ar 48000 "!name!-.ac3"
%ffmpeg% -i "!name!-.mp4" -i "!name!-.ac3" !parmstd! "!name!+.!outex!"
ping -n 8 localhost 1>nul 2>nul
set "run=auto"
goto :process-info
:post-process
mode con cols=75 lines=5&cls&color 0A&echo.
if "!run!"=="auto" (echo ein neuer Prozess wird gestartet...) ELSE echo Prozess wird beendet...
ping -n 5 localhost 1>nul 2>nul&color 0F
if exist "!name!+.!outex!" move /y "!name!+.!outex!" "!name!.!outex!"
if exist "!name!+.txt" move /y "!name!+.txt" "!name!.txt"
ping -n 5 localhost 1>nul 2>nul
goto :eof
:suche
set "info=suche Parameter..."&title !info!
%ffmpeg% -i "!name!.!inex!" 2> %tmp%\!inex!.txt
::kein Video >> mp3
find /n /i "Video:" %tmp%\!inex!.txt
if errorlevel 1 set "outex=mp3"&goto :audio-mp2
findstr /c:"Video: none" %tmp%\!inex!.txt
if not errorlevel 1 set "outex=mp3"&goto :audio-mp2
::Video: "flv1 vp6f" Zuordnung noch offen
::Video: wmv1 >>-vcodec mpeg4>> mp4
::Video: mpeg1video >>process1
::Video: mpeg2video >>-vcodec mpeg4>> mp4
::Video: mpeg4 >>-vcodec copy >> mp4
::Video: h264, mjpeg >>-vcodec copy >> mkv
if /I "%inex%"=="mp4" set "sv=mp4"&goto :audio-mp2
:video1
findstr "mpeg1video" %tmp%\!inex!.txt
if not errorlevel 1 set "bild=mpeg1"
:video2
findstr "wmv1 mpeg2video" %tmp%\!inex!.txt
if not errorlevel 1 set "parm1=-vcodec mpeg4"&set "outex=mp4"
:video4
findstr "mpeg4" %tmp%\!inex!.txt
if not errorlevel 1 set "outex=mp4"
:videoHD
findstr "h264" %tmp%\!inex!.txt
if not errorlevel 1 set "outex=mkv"
::Audio: mp3 >>-acodec copy
::Audio: ac3 >>process2
::Audio: wmav2 >>-acodec libmp3lame
::Audio: mp2 >>-acodec libmp3lame
:audio-mp2
findstr "wmav2 mp2 pcm_u8" %tmp%\!inex!.txt
REM if not errorlevel 1 set "parm2=-acodec libmp3lame"
if not errorlevel 1 set "parm=-acodec libmp3lame"&goto :suchend
:audio-ac3
findstr "ac3" %tmp%\!inex!.txt
if not errorlevel 1 set "ton=ac3"
if "!sv!"=="mp4" set "outex=mkv"&set "parm=!parm2!"&goto :suchend
if "!parm3:~0,6!"=="-sameq" (set "parm=!parm1! !parm2! !parm3!") ELSE set "parm=!parm3!"
:suchend
if "!parm3:~0,6!"=="-sameq" (set "parm=!parm! !parm3!") ELSE set "parm=!parm3!"
if exist "!name!.!outex!" move /y "!name!.!outex!" "!name!_save.!outex!"
cls&color 0A&echo.&echo Parameter-Suche beendet...
echo.&echo --"!name!.!inex!"--
ping -n 3 localhost 1>nul 2>nul&color 0F&echo.
type %tmp%\!inex!.txt
ping -n 10 localhost 1>nul 2>nul
cls&color 0A&echo.&echo Umwandlung wird gestartet...&echo.
ping -n 3 localhost 1>nul 2>nul&color 0F
goto :eof
:help
mode con cols=75 lines=10&cls&color 3E&echo.&title Hilfe zu %~n0
echo Entweder eine Media-Container-Datei
echo (%auto%)&echo.
echo auf den Link ziehen oder&echo.
echo ein komplettes Verzeichnis mit Media-Dateien.&echo.
ping -n 12 localhost 1>nul 2>nul
:ende
if not n%1==n mode con cols=75 lines=5&color 3E&title %~n0 ist beendet&echo.&echo %anzeig%&echo.
echo Fenster schlieát in 8 Sekunden
ping -n 8 localhost 1>nul 2>nul
Die Hinweise stehen zwar bereits in der BAT, doch für die Schnell-Leser:
%ffmpeg%, %sox% und %mediainfo% sind als Variable in der start-set definiert. Diese enthält den Pfad inlusive Programm (z.B.: ...\bin\ffmpeg),
ebenso %weg% ein Ordner zum Sammeln der bearbeiteten Dateien bevor der letzte Lösch-Befehl kommt.
Wer das so nicht mag (extra BAT), kann diese Angaben mit oben "set"-zen.
Benötigt werden also die Freeware-Programme "ffmpeg", "SOX" und "MediaInfo", die per Internet-Suche schnell gefunden sind.
Am einfachsten das Paket Hybrid, dort erhältlich, herunterladen. Darin sind alle Programme enthalten.
Das Tool sagt also ffmpeg folgendes:
1. Name der zu bearbeitenden Datei(en)
2. Inhalt der Streams
3. Prozecc der verwendet werden soll
3.1. Einfaches Umlabeln (Containern) auf MP4 oder MKV oder, falls nur Audio, MP3
3.2. Trennen der Streams, umkodieren der Audiospur und zusammenfügen zu MP4
3.3. Trennen der Streams und zusammenfügen zu MKV
3.4. Komplett neu Umkodieren zu MKV
4. Erstellen von Output-Infos
5. Verschieben der Input-Datei oder Test-Files in den "Spezial-Papierkorb"
Der Link läßt die Wahl zwischen einer einzelnen Datei oder komplette Ordner samt Unterordner.
"_test" - mit Unterstrich, Schreibweise sonst ist es egal - erzeugt einen Probelauf, der ab der 5. Video-Minute beginnt.
Dank der eigenen tollen Programm-Routinen sorgt ffmpeg dafür, dass die Qualität nicht leidet und reichlich Platz gespart wird.
Die Zwei REM-Stellen haben folgenden Grund:
Zeile 90 - Pause, damit bei Bedarf die Hinweise von ffmpeg gelesen werden können.
Zeile 180 - IF, auf Wunsch mal ausprobieren. Dann den REM in Zeile 181 setzen!
Die Gewählte Einstellung (Zeile 181) bewirkt ein Umkodieren des Films, die Zeile 180 nur ein "Umlabeln"
Nun bitte ich um fleißiges Ausprobieren und Rückinfos, insbesondere zu gefundenen Codecs, damit ich diese einpflegen kann.
Verbesserungsvorschläge zum Skript-Ablauf freuen mich natürlich auch, dito, Fehlerhinweise.
Die geteste Umgebung: WinXP + SP3.
Doch dürfte das Bat-File sicherlich auch auf den anderen Win-Systemen laufen, auf denen auch ffmpeg es kann.
Ich danke für Eure Aufmerksamkeit.
max5moritz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184642
Url: https://administrator.de/contentid/184642
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
2 Kommentare
Neuester Kommentar
hallo max5moritz,
Hut ab vor deiner Arbeit
da du dich anscheinend sehr für Video- und Audiobearbeitung interessierst, könnte dir vielleicht das Tool "WinFF", zu finden unter http://www.winff.org eine große Hilfe sein.
Denn das ist so ähnlich wie deine Batch-Datei, nur eben eine grafische Oberfläche für FFMPEG.
D.h., in das GUI können mehrere Dateien per Drag-&-Drop gezogen werden, die dann alle ins gewünschte Verzeichnis und Ausgabeformat gebracht werden.
liebe Grüße,
drnatur
Hut ab vor deiner Arbeit
da du dich anscheinend sehr für Video- und Audiobearbeitung interessierst, könnte dir vielleicht das Tool "WinFF", zu finden unter http://www.winff.org eine große Hilfe sein.
Denn das ist so ähnlich wie deine Batch-Datei, nur eben eine grafische Oberfläche für FFMPEG.
D.h., in das GUI können mehrere Dateien per Drag-&-Drop gezogen werden, die dann alle ins gewünschte Verzeichnis und Ausgabeformat gebracht werden.
liebe Grüße,
drnatur