bash process para copiar legendas em seus respectivos mp4 com FFMPEG

1

Tenho muitos arquivos de vídeo (mp4), com suas respectivas legendas (cada vídeo e legenda tem o mesmo nome).

A ideia cria um bash para copiar cada legenda em seu vídeo sem codificar novamente. Para o primeiro vídeo, eu tentei este comando no Terminal e funciona como um encanto:

$ ffmpeg -i 01-01-Introduction.mp4 -fix_sub_duration -i 01-01-Introduction.srt -c:s mov_text -c:v copy -c:a copy -map 0:v -map 0:a -map 1 -metadata:s:s:0 language=eng 01-01-Introduction-sub.mp4

Alguns arquivos:

  1. 01-01-Introdução.mp4
  2. 01-01-Introdução.srt
  3. 01-02-CourseOverview.mp4
  4. 01-02-CourseOverview.srt
  5. e assim por diante

alguma sugestão? obrigado antecipadamente

    
por Shywel 03.03.2016 / 07:04

2 respostas

2

Você deve tentar;

for i in *.mp4; do
    SUB={i%%.mp4}.srt
    ffmpeg -i "$i" -fix_sub_duration -i "$SUB" -c:s mov_text -c:v copy -c:a copy -map 0:v -map 0:a -map 1 -metadata:s:s:0 language=eng "$i"
 done

Você deve testar o comando acima copiando um arquivo mp4 e sua legenda em um diretório vazio, e tente lá. Se funcionar, então você pode continuar.

    
por 03.03.2016 / 08:22
2

Isso funciona. Para evitar sobrescrever os arquivos de entrada, modifiquei a variável out: "${i%.mp4}-sub.mp4"

#!/usr/local/bin/bash
# GNU bash version 4.3.42
# To avoid overwrite files: "${i%.mp4}-sub.mp4"


for i in *.mp4; do
    SUB=${i%.mp4}.srt
    ffmpeg -i "$i" -fix_sub_duration -i "$SUB" -c:s mov_text -c:v copy -c:a copy -map 0:v -map 0:a -map 1 -metadata:s:s:0 language=eng "${i%.mp4}-sub.mp4";
done

Graças a @MariusMatutiae

    
por 04.03.2016 / 04:42