ffmpegを使ってmp4とvttファイルから字幕付き動画を作成する

オンライン学習サイトでダウンロードした動画を字幕ON/OFFを切り替えながら視聴したい

目次

概要


この記事では動画ファイルと字幕ファイル(vtt)から、ffmpegを用いて字幕付き動画ファイル(mkv)を作成する方法を解説します。 さらに、スマホ上でmkvファイルを再生するアプリを探すのに少し苦労したのでそのあたりも(折角なので)紹介しようと思います。

必要なファイル・動作環境


必要なもの

  • 動画ファイル(mp4)
  • VTTファイル

環境

  • MacOS
  • ffmpeg
    • version 4.2.2
    • バージョンが古いとうまく行かないので、最新バージョンがおすすめ。
  • VLCメディアプレーヤー
    • Mac / iPad / Android

動機


最近、Courseraというオンライン学習サイトで勉強をしているのですが、 教材によってはコースで使用している動画ファイル(mp4)や字幕ファイル(vtt)をダウンロードし、 オフライン環境でも学習ができるようになっています。 つまりスマホ等に動画ファイルを落としておけばいつでも勉強ができる環境が作れます。

さらに、自分が見ているコースは英語で授業が進んでいくので 英語リスニングの勉強も兼ね、字幕をON/OFFしながら動画を見られないかと思ったのが 今回この記事を書くきっかけになりました。

ただ、公式に提供されているのはmp4とvttファイルなので、字幕付き動画は自分で作成する必要があります。 個人的にWindowsにフリーソフトをドンドコ入れるのはあまり好きじゃないので、 「コマンドで何とかできないかなぁ」と調べてみたところ、ffmpegを用いて目的が達成できそうだったのでここに備忘録として残すことにしました。

詳細


vttファイル

自分はvttフォーマットというものを初めて知ったのでここで軽く紹介します。 (mp4についてはよくある動画フォーマットなので割愛)

vttファイルに関する詳細な解説はWikipediaに委ねますが、 ざっくりいうと、どの時間にどういう字幕を出すかというキャプションパラメータが書かれたテキストファイルです。

WEBVTT Kind: captions; Language: en

00:09.000 --> 00:11.000
<v Roger Bingham>We are in New York City

00:11.000 --> 00:13.000
<v Roger Bingham>We are in New York City

上記はWikipediaより一部引用しましたが、 「何秒から何秒の間にこの字幕を出す」という意味になるのがパット見ただけでおわかりになるかと思います。 (何をしているかパッと見でここまでわかるフォーマットもなかなか珍しい)

vttはW3Cで標準化されたファイルフォーマットなので、 HTML5上ではこのテキストを下記のような形で指定し、字幕付き動画をページ内に埋め込んだりできるようです。

<video id="video" controls preload="metadata">
   <source src="video/sample.mp4" type="video/mp4">
   <source src="video/sample.webm" type="video/webm">
   <track label="English" kind="subtitles" srclang="en" src="captions/vtt/sample-en.vtt" default>
</video>

ただ、スマホで見るためには上記のようなhtmlファイルを毎回用意するわけにもいきません。 そこで、目的を達するため字幕埋め込み付き動画を事前に作ることになります。

このvttファイルを動画に埋め込むために今回使うのがffmpegというコマンドツールです。

ffmpegとは

ffmpegとは、動画と音声を記録・変換・再生するためのフリーソフトウェアで、 コマンドライン上から動画にまつわる様々な変換を処理することができるとても高性能なエンコードツールです。 (大学時代に論文投稿用ビデオをエンコードする際にとてもお世話になりました)

MacであればHomebrewから簡単にインストールできます。

$ brew install ffmpeg

ffmpegを使ってVTTファイルを動画ファイルに埋め込み

あとはmp4とvttファイルを用い、以下のコマンドでmkvファイルを作成します。

ffmpeg -i [元動画].mp4 -i [ダウンロードしたvttファイル].vtt \
  -map 0:v -map 0:a -map 1 \
  -metadata:s:s:0 language=[英語ならeng/ 日本語ならjpn] \
  -c:v copy -c:a copy -c:s srt \
  [出力先].mkv

-mapで指定した0や1などは短縮形で、実際には-map 入力:ストリーム:出力:ストリームという指定になるそうです。[1] これで字幕のON/OFFを切り替えられるmkvファイルの出来上がりです。

mkvファイルの視聴

これで、字幕つきmkvファイルの作成は完了です。 しかし、Windows、Macともにmkvファイルを視聴できるソフトがデフォルトでは入っていないので 適当な動画プレイヤーをインストールしてください。

おすすめはVLCメディアプレイヤーです。 元々はフランスの学生さんが開発を始めたらしいのですが、開発が進み、再生できるコーデック数は 数あるメディアプレーヤーの中でも群を抜いているそうです[2]

(「やたらとフリーソフトいれるのが嫌だ」と言っておきながらアレですが、VLCは内部コーデックでffmpegを使っているそうなので何卒…)

まとめ


既存の動画ファイルとVTTファイルからffmpegを使って字幕付き動画ファイルを作成する手順を紹介しました。 VTTと動画ファイルだけが手元にあるという、需要としてはなかなかニッチな状況でのノウハウですが、 いざ調べてみるとなかなか情報が出てこないので今回記事としてまとめてみました。

ytmt's
ytmt's
ゲームプログラマ
ビルドエンジニア
次へ
前へ