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: 18.05.2025 um 00:05 Uhr
1 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