2

У меня много видеофайлов (mp4) с соответствующими субтитрами (каждое видео и субтитры имеют одно и то же имя).

Идея создать bash для копирования каждого субтитра в их видео без повторного кодирования. К первому видео я попробовал эту команду на терминале и работает как шарм:

$ 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

Некоторые файлы:

  1. 01-01-Introduction.mp4
  2. 01-01-Introduction.srt
  3. 01-02-CourseOverview.mp4
  4. 01-02-CourseOverview.srt
  5. и так далее

какие-либо предложения? заранее спасибо

2 ответа2

3

Это работает. Чтобы избежать перезаписи входных файлов, я изменил переменную 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

Благодаря @MariusMatutiae

2

Тебе стоит попробовать;

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

Вы должны проверить приведенную выше команду, скопировав один файл mp4 и его субтитры в пустой каталог, и попробуйте там. Если это работает, то вы можете продолжать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .