Batch Bearbeitung von MKV Dateien mit FFMPEG
Hallo zusammen!
Ich versuche ein Batch-Skript zu erstellen, das die folgenden Eigenschaften enthalten soll:
Suche nach allen MKV Dateien im Ordner und erstelle eine neue MKV Datei
mit dem selben Dateinamen in einem anderen Ordner.
Die Videospur soll kopiert werden.
Die erste Audiospur soll mit bestimmten Eigenschaften neu erstellt werden.
Die erste Untertitelspur soll, falls vorhanden, nur kopiert werden, wenn sie als default markiert ist.
Alles andere soll ignoriert werden.
Hier ist mein bisher erstellter Code.
Soweit funktioniert alles einwandfrei, ich finde jedoch keinen Befehl,
um nur den ersten Untertitel zu kopieren wenn dieser als default geflaggt ist.
Es wäre toll, wenn mir jemand dabei helfen könnte.
Ich versuche ein Batch-Skript zu erstellen, das die folgenden Eigenschaften enthalten soll:
Suche nach allen MKV Dateien im Ordner und erstelle eine neue MKV Datei
mit dem selben Dateinamen in einem anderen Ordner.
Die Videospur soll kopiert werden.
Die erste Audiospur soll mit bestimmten Eigenschaften neu erstellt werden.
Die erste Untertitelspur soll, falls vorhanden, nur kopiert werden, wenn sie als default markiert ist.
Alles andere soll ignoriert werden.
Hier ist mein bisher erstellter Code.
FOR /F "tokens=*" %%G IN ('dir /b *.mkv') DO "D:\Progs\ffmpeg\bin\ffmpeg.exe" -i "%%G" -map 0:v:0 -map 0:a:0 -map 0:s:0? -c:v copy -c:a eac3 -b:a 640k -ar 48000 -c:s copy "E:\%%~nG.mkv"
Soweit funktioniert alles einwandfrei, ich finde jedoch keinen Befehl,
um nur den ersten Untertitel zu kopieren wenn dieser als default geflaggt ist.
Es wäre toll, wenn mir jemand dabei helfen könnte.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 672913
Url: https://administrator.de/forum/batch-bearbeitung-von-mkv-dateien-mit-ffmpeg-672913.html
Ausgedruckt am: 28.06.2025 um 11:06 Uhr
12 Kommentare
Neuester Kommentar
Moin,
das wäre ein klassischer Fall für ChatGPT oä
Hier ist die Windows-Version des Skripts (für die Eingabe über die Eingabeaufforderung (CMD)), mit denselben Funktionen: Es kopiert nur die erste Untertitelspur, wenn sie als default=1 markiert ist.
(ungetestet, aber damit kannst Du Dich dann weiter vor arbeiten)
Gruß
DivideByZero
das wäre ein klassischer Fall für ChatGPT oä
Quelle: KI
Hier ist die Windows-Version des Skripts (für die Eingabe über die Eingabeaufforderung (CMD)), mit denselben Funktionen: Es kopiert nur die erste Untertitelspur, wenn sie als default=1 markiert ist.
@echo off
setlocal EnableDelayedExpansion
:: Eingabedatei prüfen
if "%~1"=="" (
echo Usage: copy_default_subs.bat input.mkv
exit /b 1
)
set "INPUT=%~1"
set "OUTPUT=%~dpn1_with_default_subs.mkv"
:: ffprobe aufrufen und nach default-Flag der ersten Untertitelspur suchen
for /f "delims=" %%A in ('ffprobe -v error -select_streams s:0 -show_entries stream^=disposition -of default^=nw^=1:nk^=1 "%INPUT%" ^| findstr "default="') do (
set "LINE=%%A"
)
:: Extrahiere den Wert hinter "default="
for /f "tokens=2 delims==" %%B in ("!LINE!") do set "DEFAULT_FLAG=%%B"
:: Prüfen, ob default=1
if "!DEFAULT_FLAG!"=="1" (
echo Default subtitle track found. Copying video, audio, and subtitle track 0...
ffmpeg -i "%INPUT%" -map 0:v -map 0:a -map 0:s:0 -c copy "%OUTPUT%"
) else (
echo No default subtitle track. Copying only video and audio...
ffmpeg -i "%INPUT%" -map 0:v -map 0:a -c copy "%OUTPUT%"
)
endlocal
(ungetestet, aber damit kannst Du Dich dann weiter vor arbeiten)
Gruß
DivideByZero
Hallo,
https://mkvtoolnix.download/downloads.html
Gibt es auch für Windows als GUI.
Du könntest da alles einstellen und es dann in die Batch Queue schieben. Einstellungen in der GUI via Haken, DropDown Menüs etc.
Standard Audio Spur, usw.
https://mkvtoolnix.org/
Kostenlos und du kannst mehrere Filme in die Queue schieben und dann entspannt einen Kaffee trinken.
mfg Crusher
https://mkvtoolnix.download/downloads.html
Gibt es auch für Windows als GUI.
Du könntest da alles einstellen und es dann in die Batch Queue schieben. Einstellungen in der GUI via Haken, DropDown Menüs etc.
Standard Audio Spur, usw.
https://mkvtoolnix.org/
Kostenlos und du kannst mehrere Filme in die Queue schieben und dann entspannt einen Kaffee trinken.
mfg Crusher
Is there a command-line version of MKVToolNix?
Yes, MKVToolNix includes a command-line interface (CLI) for advanced users who prefer scripting or automation.
Für o.g. Code z.B. weiterführend:
www.tutorialspoint.com/batch_script/batch_script_if_statement.htm und zur For-Schleife hier aus dem Forum Tutorial zur FOR-Schleife
Da hast Du wohl den Sinn eines solchen Forums falsch verstanden. Wir sind Ehrenamtler, investieren unsere (Frei-)Zeit, warum sollen wir Dir ein komplettes Skript schreiben, ohne dass Du bereit bist, Zeit in Verständnis zu investieren? So etwas geht über in den Bereich Dienstleistung.
Ein Studium ist auch schlicht eine maßlose Übertreibung. Wenn Du Dir die Links anschaust, den Code oben nimmst, ggf. auch ein weiteres Tool mit ins Boot nimmst, dann - heutzutage geht das super - KI mit befragst, dann lernst Du was und kannst das auch selbst machen.
Ein Studium ist auch schlicht eine maßlose Übertreibung. Wenn Du Dir die Links anschaust, den Code oben nimmst, ggf. auch ein weiteres Tool mit ins Boot nimmst, dann - heutzutage geht das super - KI mit befragst, dann lernst Du was und kannst das auch selbst machen.
...hier ein weiterer ungetesteter Code, der per ChatGPT verfeinert ist:
Quelle: KI
@echo off
setlocal enabledelayedexpansion
:: Eingabe- und Ausgabeordner definieren
set "input_folder=C:\Pfad\Zu\Eingabeordner"
set "output_folder=C:\Pfad\Zu\Ausgabeordner"
:: Sicherstellen, dass der Ausgabeordner existiert
if not exist "%output_folder%" (
mkdir "%output_folder%"
)
:: Durchlaufe alle .mkv-Dateien im Eingabeordner
for %%F in ("%input_folder%\*.mkv") do (
echo ===============================
echo Verarbeite: %%~nxF
set "input_file=%%F"
set "output_file=%output_folder%\%%~nxF"
set "subtitle_index="
:: Suche nach Subtitle-Streams mit default=1
for /f "delims=" %%S in ('ffprobe -v error -select_streams s -show_entries stream=index:tags -of default=noprint_wrappers=1:nokey=1 "%%F"') do (
echo Prüfe Subtitle: %%S
echo %%S | findstr /c:"default=1" >nul
if !errorlevel! == 0 (
set "subtitle_index=1"
)
)
:: Baue ffmpeg-Befehl zusammen
set "ffmpeg_cmd=ffmpeg -i "%%F" -map 0:v:0 -c:v copy -map 0:a:0 -c:a eac3 -b:a 640k -ar 48000"
if defined subtitle_index (
set "ffmpeg_cmd=!ffmpeg_cmd! -map 0:s:0 -c:s copy"
) else (
echo Keine default Untertitelspur gefunden.
)
set "ffmpeg_cmd=!ffmpeg_cmd! -map_metadata -1 -map_chapters -1 -y "!output_file!""
echo Starte Verarbeitung:
echo !ffmpeg_cmd!
call !ffmpeg_cmd!
)
echo ===============================
echo Alle Dateien verarbeitet.
pause