ffmpeg untertitel "automatisch" hinzufügen

chrstu77

Cadet 2nd Year
Registriert
Sep. 2022
Beiträge
19
Hallo,
ich habe einen Ordner voll mit *.mp4 Dateien und jeweils eine zugehörige *.srt die genauso benannt ist wie die jeweilige *.mp4 .
Bisher habe ich das mit folgender Befehlszeile verarbeitet, damit ich die Datei ggf. auch über Itunes abspielen kann und der Untertitel mit angezeigt wird.

ffmpeg -i "INPUT.mp4" -i German.srt -c copy -c:s mov_text -metadata:s:s:0 language=ger "OUTPUT.mp4"


Ich weis auch wie ich einen ganzen Ordner voll Dateien "automatisch bearbeiten" kann, nur leider nicht wenn die *.srt wechselnde Namen hat.

for /R %f IN (*.ts) DO ffmpeg -i "%f" -codec copy "%~nf.mp4"

Dazu muss ich aber anmerken das ich die erste Befehlszeile verstehe, die zweite nur erahnen kann.

/R wird wohl das Verzeichnis bedeuten
%f die Variable für den hinter IN festgelegten Dateityp *.ts
Dann das Programm welches aufgerufen werden soll FFMPEG mit der eigentlichen Anweisung -i -codec copy
Naja und als letztes das die erstellte Datei den gleichen Namen trägt wie die verarbeitete. %~nf.mp4

Aber wie bekomme ich da rein, das eine Untertiteldatei die den gleichen Namen trägt wie die Videodatei verarbeitet/angesprochen wird. Ich hoffe man kann verstehen was ich will/suche/brauche/möchte :)
 
a) lieber gleich PowerShell nehmen
b) mit Google findet man auch, wie du aus %f den Teil ohne Erweiterung bekommen würdest.
 
Da bleibt die Möglichkeit der RegEx-Magie.

Ich bin für ernste RegEx aber zu doof, deshalb würde ich mir da ein kleines Skript basteln.
Eine Hilfsdatei mit der Zuordnung von Film- bzw. Untertiteldateinamen ist ja schnell erstellt.

Diese kann bequem zeilenweise abgearbeitet werden...
 
alternativ auch mit Editoren und Makros arbeiten... hab ich früher auch oft gemacht...
davor "dir *.ts > meineliste.txt" und die Datei dann entsprechend bearbeiten usw

Gibt viele Wege, was man so machen kann.

Wenn es häufig vorkommt, dann wäre die PowerShell-Variante (also ein hoher Grad an Automatisierung) sinnvoll.
 
Ok, erstmal danke für die vielen und zeitnahen Hinweise. Ich hätte nicht gedacht das so schnell jemand antwortet. Mal sehen ob ich mit den genannten Hinweisen irgendwie weiter komme. Sollte ich es hinbekommen, werde ich es euch natürlich wissen lassen.
 
Also ich habe etwas gefunden, ein bisschen angepasst und für mich funktioniert es. Ganz verstehen tu ich es zwar nicht, was ein bisschen unbefriedigend ist aber dafür fehlt mir wohl einfach zu viel Grundlegendes Wissen, da ich mich zu wenig mit der Materie beschäftige oder ich bin zu alt oder zu blöd. Aber freuen tut es mich dennoch das es funktioniert. :)

for %f IN (*.mp4) DO ffmpeg -i "%~nf.mp4" -i "%~nf.srt" -c copy -c:s mov_text "C:\Users\Benutzername\Videos\Serien\The First 48\Temp\%~nf.mp4"
 
Naja, verstehen muss man es nciht...
%f = die Datei mit Erweiterung .mp4
%~nf = die Datei ohne Erweiterung...

statt %~nf.mp4 könntest du auch einfach %f schreiben bei dem -i
Bei der Ausgabe würde ich es so lassen.
 
Okay danke.

Noch eine andere Frage:
Ich befinde mich in diesem Pfad:
"C:\Users\Benutzername\Videos\Serien\The First 48\"
und möchte gerne bearbeitete Dateien in bspw. dem Unterordner "Temp" speichern.
Muss ich in der Ausgabe den vollen Pfad angeben so wie ich es in meiner Anweisung getan habe? Oder gibt es auch eine "verkürzte Version", ab dem Pfad in dem ich mich gerade befinde. Vielleicht "...\Temp\%~nf.mp4" oder irgendwie sowas?
 
Also was du machen kannst ist dir einfach Variablen selbst definieren mit SET.
Ob es relativ passt, kann ich dir nicht pauschal sagen, wo soll denn der Ordner Temp liegen? Direkt im Benutzer-Verzeichnis? Dann würde ich mal über %TEMP% stattdessen nachdenken, das liegt aber AppData\Local\Temp.

Also z.B.
set TARGET=C:\Users\Benutzername\Videos\Temp
und dann "%TARGET%\%~nf.mp4"
oder so...

Ob es mit relativer Angabe funktioniert, kannst du ja auch testen. Wenn du dir nicht sicher bist, was passiert, kannst du auch die Sachen einfach mal mit "echo" ausgeben lassen, z.B.

for %f IN (*.mp4) DO echo "%TEMP%\%~nf.mp4"
 
Zurück
Oben