Unisci in batch / mux file MP4 e SRT in MKV


0

Quindi ho cercato una risposta a questo e sono stato in grado di trovare molti casi simili , ma non sono riuscito a trovare una risposta a ciò che sto cercando di fare.

Ho dato uno sguardo a questi due thread in particolare:

Anche Google cercava e leggeva un mucchio di pagine man senza risultati. (Non significa che le risposte non ci siano, non sono riuscito a trovarle!)


Ad ogni modo, con quella prefazione fuori mano, ecco cosa sto cercando di fare:

Ho tre cartelle (e un miliardo di file) di questo:

  • Mostra nome - S ## E ## - Title.mp4
  • Mostra nome - S ## E ## - Title.eng.srt

Sto cercando di unire ogni .mp4 e .srt solo Show Name - S##E## - Title.mkvcon i sottotitoli inclusi nel file.

Il problema con il primo thread correlato che ho collegato è che trasforma semplicemente .mp4 in .mkv e non unisce affatto i sottotitoli.

Codice:

FOR %%A IN (*.mp4) DO "C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%%~nA.mkv" "%%~A"

Questo crea il file .mkv, ma non include i sottotitoli. Se provo ad aggiungere "%%~dpnA.srt"qualcosa o dopo "%%~A", ricevo un messaggio che dice: Error: The file 'C:\Users\xnaas\Desktop\test\Show Name - S##E## - Title.srt' could not be opened for reading: open file error.e simili. La mia più grande confusione qui è che non so cosa stia facendo qualsiasi cosa stia scrivendo. Cosa sta facendo ~o nAfacendo?

Il problema con il secondo collegamento è che non so come adattarlo per essere in forma batch perché non sono affatto sicuro di come farlo con ffmpeg. Suppongo che sia solo un altro per loop, ma non ho molta familiarità con esso.

Questo è l'unico script che ho usato per ffmpeg (Linux ora vs Windows sopra) prima:

for f in *.mkv; do ffmpeg -i "$f" -c:v libx264 -preset medium -crf 18 -c:a copy "encoded/${f%.mkv}.mkv"; done

Sono sicuro che probabilmente potrebbe essere adattato, ma non sono sicuro di come.

for f in *.mp4; do ffmpeg -i "$f" -c copy "test/${f%}.mkv"; done

Questo è il migliore che potrei inventare dopo molto tempo per armeggiare con esso, ma questo ovviamente non porta i file dei sottotitoli e nomina anche tutto .mp4.mkv.


Ci scusiamo per il massiccio muro di merda lassù. Non vedo l'ora di ricevere assistenza / approfondimenti che chiunque può offrire. Grazie!


Dovrei aggiungere, posso usare Bulk Rename Utility per rimuovere .engda ogni file .srt se necessario. Non ha bisogno di essere lì, ovviamente.
xnaas

Dovrebbe anche notare: non mi interessa se la soluzione viene eseguita su Windows o in bash. Posso usare entrambi. Ho solo bisogno di ... qualcosa. :)
xnaas

Per spiegare alcune delle operazioni
svolte

Hmm ... non riesco a decidere se questo ha creato più domande di quelle a cui ha risposto o no, ancora ... :) Grazie per le informazioni, però!
xnaas

Lo ha sicuramente fatto. Ora posso solo scherzare con le bandiere e ottenere il resto dei dettagli. Dovresti pubblicare la tua risposta separatamente in modo che io possa contrassegnarla. :)
xnaas

Risposte:


0

Proverò a spiegare come i parametri batch qui forniti vengono applicati allo script che hai fornito.

Il parametro di base nel FORloop è %%A. Il %%Aviene modificato nei seguenti modi:

  • "%%~nA.mkv"sta rimuovendo le virgolette ( ~) e usando solo il nome del file ( n).
  • "%%~A"sta rimuovendo le virgolette ( ~)

Penso che il tuo comando finale dovrebbe finire come:

FOR %%A IN (*.mp4) DO "C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%%~nA.mkv" "%%~A" "%%~nA.eng.srt"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.