🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

Q&A

解決済

2回答

6610閲覧

FFmpeg 自動的に日本語字幕を選別して抽出するコマンド

Rasny

総合スコア21

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

0グッド

0クリップ

投稿2021/02/26 12:04

(1)
FFmpegで、動画から字幕を言語で自動判別して抽出するコマンドを探しています。
種類はASSに限定したいのですが、それはうまくいきました。

ffmpeg

1//動画を$fとします。 2ffmpeg -i $f -c copy -scodec ass -metadata language=jpn ${DIRNAME}/${BASENAME}.jpn.ass

上記で、とりあえず動画コンテナ内のASSファイルを、動画と同じファイル名で同ディレクトリに抽出できるようになりました。
ただ、これだと複数ある字幕のうち、一番最初のASS字幕を抽出するだけになります。

最終的にはアプリ化して、複数動画をまとめて放り込む→まとめて自動処理、の流れにしたいので
ffmpeg -i $f にてファイルのstream番号を確認後、-mapで指定して……という手作業の方法は無しで考えています。

(2)
また、Languageの指定なのですが、日本語の場合、「jpn」と「ja」のどちらが正しいのか知りたいです。
かなり調べたのですが、いまいちよくわかりませんでした。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

その後、自己解決できました!

ffmpeg

1/usr/local/bin/ffmpeg -i $f -c copy -map 0:s:m:language:jpn -scodec ass ${DIRNAME}/${BASENAME}.jpn.ass

以上のように -map 0:s:m:language:jpn とパラメータ指定すると選択して抽出できました!

ちなみにMac限定ですが、Automatorを使って選択した複数動画を一括処理できる方法について。
Automatorで新規クイックアクションを開きます。
Automator新規クイックアクション
画像の通りに設定します。
設定
シェルスクリプトは下記のコードを。
処理内容を換えれば、動画のエンコードなども自由に設定できます。

shellscript

1for f in "$@" 2do 3 DIRNAME=`dirname $f` 4 BASENAME=`basename $f .mkv` 5 /usr/local/bin/ffmpeg -i $f -c copy -map 0:s:m:language:jpn -scodec ass ${DIRNAME}/${BASENAME}.jpn.ass 6done

保存すると終了です。
動画を選択した状態でコンテキストメニューの「クイックアクション」の中に保存した名前のメニューがあります。
(動画以外のファイルを選択したら出てきません。)
コンテキストメニュー

※自分はAutomatorの「アプリケーション」で作成しアプリ化しました。やり方がはほぼ同じです。

投稿2021/03/05 05:28

Rasny

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

とりあえず、日本語の指定はjpnで良いようです。

複数の字幕を全て取得したいということでしたら、mapでの指定は

-map 0:a

とすることで手作業で確認するという手順を挟まなくても複数の字幕を取得できそうです。

ただ、複数の動画を扱うとのことでしたが、複数の動画の複数の字幕をワンライナーで記述する方法は分かりませんでした…

投稿2021/02/26 16:33

ppin

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Rasny

2021/03/03 11:11

確認が遅くなりまして申し訳ありません! teratailで登録していたメールが不備を起こしていたようで、ご回答に気づけませんでした。ご教授いただいた方法で、ひとまず字幕を手当たり次第に抽出することはできました。 複数の動画を扱う方法ですが、当方Macでして、Automatorという処理の登録・自動化ができるアプリがあります。シェルスクリプトで for do 〜 done 構文で処理を記述してアプリとして保存すると、とりあえず放り込んだデータに対して順番に処理してくれる簡易なアプリが作れます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問