Batch merge / mux arquivos MP4 e SRT para MKV

0

Então eu tenho procurado uma resposta para isso e consegui encontrar muitos casos similares , mas incapaz de encontrar uma resposta para o que estou tentando fazer.

Eu dei uma olhada nestes dois tópicos em particular:

Além disso, o Google pesquisou e leu várias páginas de manual sem sucesso. (Não significa que as respostas não estão lá, eu simplesmente não consegui encontrá-las!)

De qualquer forma, com esse prefácio fora do caminho, aqui está o que estou tentando fazer:

Eu tenho três pastas (e um bilhão de arquivos):

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

Estou tentando mesclar todos os arquivos .mp4 e .srt em apenas Show Name - S##E## - Title.mkv com as legendas incluídas no arquivo.

O problema com o primeiro tópico relacionado que eu vinculei é que ele simplesmente transforma o .mp4 em .mkv e não mescla as legendas.

Código:

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

Isso cria o arquivo .mkv, mas não inclui as legendas. Se eu tentar adicionar "%%~dpnA.srt" ou qualquer coisa depois de "%%~A" , recebo uma mensagem dizendo: Error: The file 'C:\Users\xnaas\Desktop\test\Show Name - S##E## - Title.srt' could not be opened for reading: open file error. e similar. Eu geuss minha maior confusão aqui é que eu não sei o que qualquer coisa que estou digitando está fazendo. O que é um ~ ou nA fazendo?

O problema com o segundo link é que eu não sei como adaptá-lo para estar em forma de lote porque não tenho certeza de como fazer isso com o ffmpeg. Eu suponho que seja apenas outro loop, mas não sou tão familiarizado com isso.

Este é o único script que usei para o ffmpeg (Linux agora vs Windows acima) antes:

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

Tenho certeza de que provavelmente poderia ser adaptado, mas não sei como.

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

Isso é o melhor que eu consegui fazer depois de um longo tempo mexendo nele, mas isso obviamente não traz os arquivos de legenda e nomeia tudo .mp4.mkv também.

Desculpe pela enorme parede de lixo lá em cima. Estou ansioso para qualquer assistência / visão que alguém possa oferecer. Obrigada!

    
por xnaas 16.12.2016 / 22:57

1 resposta

0

Vou tentar explicar como os parâmetros de lote são fornecidos aqui estão sendo aplicados ao script que você deu.

O parâmetro básico no loop FOR é %%A . O %%A é modificado das seguintes maneiras:

  • "%%~nA.mkv" está removendo as aspas ( ~ ) e usando apenas o nome do arquivo ( n ).
  • "%%~A" está apenas removendo as aspas ( ~ )

Acho que seu comando final deve terminar como:

FOR %%A IN (*.mp4) DO "C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%%~nA.mkv" "%%~A" "%%~nA.eng.srt"
    
por 17.12.2016 / 05:41