So erstellen Sie alle Videos und Untertitel mit demselben Dateinamen

763
Anton

Ich habe einen Ordner mit verschiedenen Video- und Untertiteltypen, wobei jeder Satz von Videos und Untertiteln denselben Dateinamen hat, und einige Videos ohne Untertitel. Zum Beispiel,

video01.mp4

video01.srt

video02.mkv

video02.srt

video03.mp4

video03sub und .idx

video04.mkv

video05.mkv

video05sub und .idx

video06.mp4

video06.srt

video06sub und .idx

und so weiter. Das obige Beispiel verwendet nur zwei Arten von Videos (mp4 und mkv) und Untertitel (srt und sub / idx). Beachten Sie, dass video06 zwei Arten von Untertiteln hat (srt und sub / idx), während video04 keine Untertitel hat.

Ist es möglich, eine Batchdatei zu erstellen, die den Ordner durchläuft, und mkvmerge jeden Videotyp (in diesem Fall mkv oder mp4) mit verfügbaren Untertiteln (in diesem Fall srt, sub / idx oder beides) und in eine mkv das wird in einen anderen ordner geschrieben? In Anbetracht des obigen Beispiels

video01.mp4 und video01.srt werden mit mkvmerge zusammengeführt und die Ausgabe video01.mkv wird in einen neuen Ordner geschrieben

Hoffentlich kann ich dem Code bei Bedarf weitere Videotypen (wie avi) hinzufügen.

2

1 Antwort auf die Frage

1
shawn

Dies sollte tun, was Sie wollen. Speichern Sie es als "mkvmerger.bat" und geben Sie es zusammen mit mkvmerge.exe in den Pfad ein

Ich habe das ursprünglich geschrieben, um etwas sehr ähnliches mit ffmpeg zu machen. Im Grunde werden Dateien mit einer Handvoll bestimmten Dateitypen (avi, m4v, mkv, mp4, mpeg, mpegts, mpg) gesucht und an mkvmerger zurückgegeben, die dann nach Dateien mit demselben Basisnamen, aber unterschiedlichen spezifischen Erweiterungen (srt, idx) sucht, sub, ogg, mp3, aac) und fügt sie der Argumentliste hinzu. Dann ist alles an mkvmerge übergeben, um die Arbeit zu erledigen. Ich verwende mkvmerge nicht, daher weiß ich nicht, ob Sie sowohl idx als auch sub übergeben müssen. Versuchen Sie es also so wie es ist, und wenn Sie Probleme haben, versuchen Sie es nur mit dem einen oder dem anderen (entfernen Sie die fehlerhafte Zeile ).

@ECHO OFF ::'=========================================================== :: mkvmerger.bat :: mkvmerge recipe.  :: :: Written by Shawn K. Hall ::  ::'=========================================================== ::setlocal enableDelayedExpansion ::'=========================================================== where /q mkvmerge.exe IF NOT "%errorlevel%"=="0" GOTO nomkvmerge ::'===========================================================   ::'=========================================================== :input ::'=========================================================== :: defaults IF "%mkvTargetDir%"=="" SET mkvTargetDir=Done\ IF "%~1"=="" GOTO all GOTO next ::'===========================================================   ::'=========================================================== :next IF /I "%~1"=="*" SHIFT&&GOTO all IF /I "%~1"=="all" SHIFT&&GOTO all IF /I "%~1"=="" GOTO done SET inparam=%~1 IF "%~1"=="" GOTO none SET inparam2=%inparam:^*=% IF NOT "%inparam2%"=="%inparam%" SHIFT&&GOTO many SET inparam2= GOTO process ::'===========================================================   ::'=========================================================== :all FOR %%x IN ("avi" "m4v" "mkv" "mp4" "mpeg" "mpegts" "mpg") DO ( IF EXIST *.%%x FORFILES /M *.%%x /c "cmd /c CALL mkvmerger.bat ^"@file^"" ) GOTO next ::'===========================================================   ::'=========================================================== :many IF EXIST "%inparam%" FORFILES /M %inparam% /c "cmd /c CALL mkvmerger.bat ^"@file^"" GOTO next ::'===========================================================   ::'=========================================================== :destexists ECHO. The destination file already exists: ECHO. "%mkvTarget%" ECHO. Are you sure you haven't already processed this file^? ECHO. GOTO done ::'===========================================================   ::'=========================================================== :none ECHO. Error: You must pass the source video file or "^*" as an argument. ECHO. GOTO done ::'===========================================================   ::'=========================================================== :nomkvmerge ECHO. Error: mkvmerge is either not installed or is not in the path. ECHO. GOTO done ::'===========================================================   ::'=========================================================== :process SET mkvSources=%~1 SET mkvTarget= SET mkvTargetName=%~n1 SET mkvTargetExt=.mkv SET "mkvTarget=%mkvTargetDir%\%mkvTargetName%%mkvTargetExt%" IF EXIST "%mkvTarget%" GOTO destexists IF NOT EXIST "%mkvTargetDir%" MKDIR "%mkvTargetDir%" ECHO. ECHO.Starting with "%mkvTarget%" :processing IF EXIST "%mkvTargetName%.srt" SET "mkvSources=%mkvSources% %mkvTargetName%.srt" IF EXIST "%mkvTargetName%.idx" SET "mkvSources=%mkvSources% %mkvTargetName%.idx" IF EXIST "%mkvTargetName%.sub" SET "mkvSources=%mkvSources% %mkvTargetName%.sub" IF EXIST "%mkvTargetName%.ogg" SET "mkvSources=%mkvSources% %mkvTargetName%.ogg" IF EXIST "%mkvTargetName%.mp3" SET "mkvSources=%mkvSources% %mkvTargetName%.mp3" IF EXIST "%mkvTargetName%.aac" SET "mkvSources=%mkvSources% %mkvTargetName%.aac" mkvmerge.exe -o "%mkvTarget%" %mkvSources% :processingDone ECHO.Done with "%mkvTarget%" ECHO. GOTO done ::'===========================================================   ::'=========================================================== :done 
Danke für die Hilfe. Beim Lesen von Dateien wie "I am Happy.mp4" und "I am Happy.srt" sind Fehler aufgetreten, die durch Hinzufügen von Anführungszeichen zu "% ~ 1" und "mkvTargetName%" behoben wurden. Variablen. Ich fand auch heraus, dass mkvmerge nur die idx-Datei in sub / idx-Sets laden muss. Wieder schätze ich die Unterstützung. Anton vor 5 Jahren 1