web-dev-qa-db-ja.com

FFMPEGを使用してそれぞれのmp4の字幕をコピーするbashプロセス

私はmanyビデオファイル(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-はじめに.mp4
  2. 01-01-Introduction.srt
  3. 01-02-CourseOverview.mp4
  4. 01-02-CourseOverview.srt
  5. 等々

助言がありますか?前もって感謝します

2
Shywel

これは機能します。入力ファイルの上書きを避けるために、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に感謝します

3
Shywel

試してみてください;

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

one mp4ファイルとそのサブタイトルを空のディレクトリにコピーして上記のコマンドをテストし、そこで試してみてください。それがうまくいけば、あなたは続けることができます。

2
MariusMatutiae