データ分析において、動画からの情報を活用するケースがますます増えています。顔認識、感情分析、物体検知、音声認識など、AI開発の領域でも動画からのデータが重要な要素となっています。こうした場面で、動画から抽出した画像や音声が貴重な学習データとして活用されることが少なくありません。
そして、動画から簡単に画像や音声を抽出できるツールとしてffmpegがあります。
ffmpegは無料の動画編集ツールでありながら、数多くの機能があり、非常に強力なツールですが、コマンドラインであるために少々わかりにくいといった弱点もあります。そこで、今回はffmpegのダウンロードとインストール、そして動画からデータ分析をするために役立つffmpegの機能について紹介したいと思います。
ffmpeg とは
ffmpeg(Fast Forward MPEG)は、オープンソースのマルチメディアフレームワークであり、動画と音声の処理、変換、編集において世界的に使用されています。異なるメディアフォーマットやコーデックに対応し、高品質なメディアのエンコード・デコードを行うことが可能です。また、単純なコマンドラインツールとして提供されるため、プログラマーやデータ分析の専門家から広く愛用されています。
主な機能 | 用途 |
---|---|
動画の変換とエンコード | 異なるフォーマットへの変換、再生可能形式へのエンコード |
音声の変換と編集 | 音声ファイルの変換、クリップ作成 |
画像と動画から情報抽出 | 画像抽出、フレームごとの情報取得 |
フィルタリングとエフェクト | 映像と音声にフィルターやエフェクトを適用 |
尚、ffmpeg の詳しい情報については ffmpeg 公式サイトに記載されているので、合わせてご一読下さい。
ffmpeg に含まれる3つの機能
ffmpeg をダウンロードすると、以下の3つのファイルが同梱されています。
ファイル名 | 特徴 |
---|---|
ffmpeg | 動画と音声の変換、エンコード、フィルタリング、エフェクトなどの メディア処理を行うコマンドラインツール。 |
ffprobe | メディアファイルの情報を表示し、解析するためのユーティリティ。 メディアファイルのプロパティやストリーム情報を詳細に分析できる。 |
ffplay | メディアファイルの再生を行うシンプルなメディアプレイヤー。 シークやループ、スローモーション再生などの機能を提供する。 |
ダウンロード方法
ffmpeg は 以下の公式サイトからダウンロードできます。
上記のURLに移動すると下記の画面が表示されます。ここから
ffmpeg-master-latest-win64-gpl.zip
を選択してダウンロードして下さい。
インストール方法
ダウンロードした ffmpeg-master-latest-win64-gpl.zip はZIP形式の圧縮ファイルなので、解凍が必要です。
解凍したら、ffmpeg.exe (必要なら残り2つも)を任意のフォルダにコピーして下さい。例えばCドライブ直下、又は 「Program Files」直下、あるいは 「C:\Users\ユーザー名」直下 に 「bin」 フォルダごとコピーして、「bin」を「ffmpeg」に変更するなどして下さい。
次に必要に応じて環境変数に登録します。
Windows11の画面下端にある検索窓から 次のコマンドを入力し、エンターキーを押します。
sysdm.cpl
システムのプロパティが表示されるので、「①詳細設定」⇒「②環境変数」⇒「③Path」⇒「④編集」⇒「⑤新規」⇒「⑥」でffmpg.exeを入れたフォルダのパスを入力し、「⑦OK」ボタンをクリックします。
動画編集(ffmpegの使い方)
ffmpeg には数多くのオプションがありますが、多くの場合は入力ファイルと出力ファイルの拡張子から行いたい処理を判断してくれるため、非常に簡単に扱うことが出来ます。
コマンドとオプション
<基本コマンド>
動画⇒画像の抽出 | ffmpeg -i <入力ファイル> <出力ファイル> |
---|---|
動画⇒音声の抽出 | ffmpeg -i <入力ファイル <出力ファイル> |
画像⇒動画の作成 | ffmpeg -i <入力ファイル> -i <音声入力ファイル> <出力ファイル> |
動画フォーマット変換 | ffmpeg -i <入力ファイル> <出力ファイル> |
動画の縦横反転 | ffmpeg -i <入力ファイル> -vf vflip,hflip <出力ファイル> |
動画の回転 | ffmpeg -i <入力ファイル> -vf transpose=<回転方向 > <出力ファイル> |
動画の指定範囲の抽出 | ffmpeg -ss <開始時刻> -i <入力ファイル> -t <長さ> <出力ファイル> |
動画の分割 | ffmpeg -i <入力ファイル> -f segment -reset_timestamps 1 -c copy -segment_time <秒数 > <出力ファイル> |
動画の結合 | ffmpeg -f concat -i <動画リストファイル> -c copy <出力ファイル> |
動画と音声の結合 | ffmpeg -i <入力動画ファイル> -i <入力オーディオファイル > -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 <出力動画ファイル> |
動画のクロップ | ffmpeg -i <入力ファイル > -vf crop=x=<x始点>:y=<y始点>:w=<横サイズ>:h=<縦サイズ > <出力ファイル> |
-c copy オプションを指定すると、動画の分割や結合において再エンコードを行いません。その分処理速度は向上しますが、動画によっては再生時に画像が乱れる等の不具合が発生する場合があります。
この時は、-c copy オプションを付けずに処理を行ってください。
<範囲の指定>
役割 | オプション | 説明 |
---|---|---|
先頭からの開始位置 | -ss | ファイルの先頭をから、指定した秒数又は時刻だけ処理を飛ばします。 省略時はファイルの先頭から処理されます。 例:-ss 20 ⇒ファイル先頭から20秒後に処理を開始 -ss 00:10:08⇒ファイルの先頭から608秒後に処理を開始 |
切り出し時間 | -t 又は -to | -ss で指定した開始位置から、-t で指定した秒数又は時刻だけ 処理を行います。 省略時はファイルの最後まで処理されます。 例:-t 50 ⇒処理を開始してから50秒後に処理を終了 -t 00:01:05 ⇒ 処理を開始してから65秒後に処理を終了 |
hoge.mp4 の先頭を起点に100秒後から、50秒間だけ動画を切り出し、result.mp4に保存したい場合、次のように記述できます。下記はいづれも同じ結果になります。
ffmpeg -i hoge.mp4 -ss 100 -t 50 result.mp4
ffmpeg -i hoge.mp4 -ss 100 -t 00:00:05 result.mp4
ffmpeg -i hoge.mp4 -ss 00:01:40 -to 00:00:05 result.mp4
<フレームレートの指定>
役割 | オプション | 説明 |
---|---|---|
フレームレートの指定 | -r | フレームレートを指定します。入力ファイルより小さい値 を指定した場合、間の画像は間引かれ、逆に大きい場合は 間の画像が補完されます。 |
hoge.mp4 の先頭から、100秒間だけ動画を切り出し、フレームレートを1(1秒ごと)にして、result.mp4に保存したい場合、次のように記述できます。
ffmpeg -i hoge.mp4 -t 100 -r 1 result.mp4
動画⇒画像の抽出
動画ファイルから、開始時間から指定した秒数だけ画像を切り出します。
ffmpeg -i 入力ファイル -q:v 1 出力ファイル(拡張子:画像)
- 出力ファイル名の拡張子(.jpg,.png,.bmp)に応じた画像フォーマットで出力されます。
- 出力ファイルには %06d.jpg のように書式を指定する必要があります。
- -q:v 1 は jpg 画像の品質を指定するオプションで、これを指定しないと画質が劣化します。bmp やpngの場合は指定せずとも画質の劣化はありません。
- 同じファイル名が存在する場合、その画像の切り出しは行わず、次に進みます。
下記のコマンドを実行すると、resフォルダに最高画質のJPGファイルが "Game_000001_img.jpg","Game_000002_img.jpg2",・・・ という名前で出力されます。
ffmpeg -i ゲーム大会.mp4 -q:v 1 res/Game_%06d_img.jpg
フォルダとファイルの間の区切り文字(res/Game_%06d_img.jpg)に '/' を指定していますが、もちろんWindows標準の \ で区切ることも可能です。
動画⇒音声の抽出
動画ファイルから、開始時間から終了時間までの音声を切り出します。
ffmpeg -i 入力ファイル 出力ファイル(拡張子:音声)
- 出力ファイル名の拡張子(.wav,.mp3,.aac,.wma)に応じた音声フォーマットで出力されます。
下記のコマンドを実行すると、wav形式の音声ファイルが出力されます。
ffmpeg -i ゲーム大会.mp4 ゲーム大会_音声.wav
画像⇒動画の作成
画像ファイルを結合して動画を作成します
ffmpeg -i 入力ファイル(拡張子:画像) -i 音声入力ファイル 出力ファイル
- 入力ファイル(画像)は %06d.jpg のように書式を指定する必要があります。
- 出力ファイル名の拡張子(.avi,.mp4,.wmv,mov)に応じた音声フォーマットで出力されます。
- 音声ファイルに動画を指定すると、その動画から音声を取り出してくれます。
- 音声ファイルを指定しない場合、音声無しの動画が作成されます。
次のコマンドを実行すると、res フォルダに保存されている画像と、ゲーム大会.MP4 の音声を使って、動画を作成します。
ffmpeg -i res/Game_%06d_img.bmp -i ゲーム大会.MP4 Game大会動画.mp4
1つめの -i は画像ファイルの場所とファイル名のフォーマットを指定しています。2つ目の -i は音声ファイルの取得先を指定しています。
動画フォーマット変換
動画ファイルを別のフォーマットに変換します
ffmpeg -i 入力ファイル 出力ファイル
- 出力ファイル名の拡張子(.avi,.mp4,.wmv,mov)に応じた音声フォーマットで出力されます。
下記コマンドを実行すると、MP4からmov にフォーマット変換してくれます。
ffmpeg -i ゲーム大会.MP4 Game大会.mov
動画の縦横反転
-vf vfilp、hfilp オプションを使うと動画を上下左右に反転することが可能です。
ffmpeg -i 入力ファイル -vf vflip,hflip 出力ファイル
左右反転 | --vf hfllip |
---|---|
上下反転 | -vf vflip |
上下左右反転 | -vf hflip,vflip |
下記コマンドを実行すると、上下左右を反転した動画をavi形式で出力します。
ffmpeg -i 浜辺.mp4 -vf hflip,vflip 浜辺上下反転.avi
動画の回転
-vf "transpose" オプションを使うと動画を90度回転させることが可能です。
ffmpeg -i 入力ファイル -vf transpose=回転方向 出力ファイル
左右反転して反時計回りに90度回転 | 0 |
時計回りに90度回転 | 1 |
反時計回りに90度回転 | 2 |
左右反転して時計回りに回転 | 3 |
ffmpeg -i 海辺花火.mp4 -vf transpose=0 海辺花火_反転左90.mp4
ffmpeg -i 海辺花火.mp4 -vf transpose=1 海辺花火_右90.mp4
ffmpeg -i 海辺花火.mp4 -vf transpose=2 海辺花火_左90.mp4
ffmpeg -i 海辺花火.mp4 -vf transpose=3 海辺花火_反転右90.mp4
動画の指定範囲の抽出
-ss で指定した時刻から、 -t で指定した長さだけ動画を抽出します。
ffmpeg -ss 開始時刻 -i 入力ファイル -t 長さ 出力ファイル
動画の1分後から20秒間の動画を抽出する場合は以下の様になります。
ffmpeg -ss 00:01:00 -i 浜辺.mp4 -t 00:00:20 浜辺ショート.mp4
-c copy オプションを指定すると再エンコード無しで抽出されます。但し動画によっては冒頭部分がスムーズに再生できない等の不具合が起きる場合があるので、注意しましょう。
ffmpeg -ss 00:01:00 -i 浜辺.mp4 -t 00:00:20 -c copy 浜辺ショート.mp4
-ss 、 -t ともに、秒数または時刻(hh:mm:ss) の指定が可能です。また、-t は -to と記述することもできます。
動画の分割
入力ファイルを-segment_timeで指定した秒数ごとに分割します。
ffmpeg -i 入力ファイル -f segment -reset_timestamps 1 -c copy -segment_time 秒数 出力ファイル
- 出力ファイルは %06d.jpg のように書式を指定する必要があります。尚、 -f segment を指定しないと出力ファイルに書式を書いても、書式であることを認識してくれません。
- -segment_time に分割したい秒数を指定します。
- -c copy オプションを指定すると再エンコード無しで分割します。分割後の動画ファイルがうまく再生できないなどの場合は、このオプション無しで実行することで解決できます。
- -reset_timestamps 1 は、動画と音声の再生タイミングを合わせるためのタイムスタンプ情報をリセットするための指定であり、音ズレ防止の為につけておきます。
動画の結合
テキストファイルに記載されている動画を結合します。結合対象のファイルがすべて同じフォーマットの場合、-c copy オプションで再エンコード無しで結合できます。
ffmpeg -f concat -i 動画リストファイル -c copy 出力ファイル
あらかじめ結合対象の動画を、動画リストファイルに記載しておく必要があります。動画ファイルの置き場所がカレントフォルダではない場合、動画リストファイルにパスを含めて記述します。
この時、フォルダとフォルダ、フォルダとファイルの区切り文字は¥ではなく / を記述しないとエラーになります。また、各行の先頭には file を記述する必要があります。
下記は動画ファイルリストのサンプルです。
file res/output_000.mp4
file res/output_001.mp4
file res/output_002.mp4
下記のコマンドを実行すれば、1つのファイルに結合できます。
ffmpeg -f concat -i movielists.txt -c copy ゲーム大会結合.mp4
動画と音声の結合
動画ファイルと音声ファイルを結合します。例えば動画にBGMを入れたり、元の動画の音声を別の音声に置き換える場合に使用します。
ffmpeg -i 入力動画ファイル -i 入力オーディオファイル -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 出力動画ファイル
ffmpeg -i 浜辺.mp4 -i bgm.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 浜辺BGM付き.mp4
結合する動画によっては、結合部分にノイズが入ったり、再生が不安定になることがあります。 この場合は -c:v copy を指定しないことで解決できます。
動画のクロップ
入力ファイルにおいて、指定した範囲をロッピングします。
ffmpeg -i 入力ファイル -vf crop=x=x始点:y=y始点:w=横サイズ:h=縦サイズ 出力ファイル
XとYを指定すると、そこを起点にクリッピングします。
ffmpeg -i 浜辺.mp4 -vf crop=x=50:y=50:w=300:h=200 crip_video.MP4
XとYを省略すると、中心を起点にクリッピングします。
ffmpeg -i 浜辺.mp4 -vf crop=w=300:h=200 crip_video.MP4
動画再生(ffplayの使い方)
動画再生は ffplay.exe を使用します。こちらもオプションがたくさん用意されていますので、詳細については こちらの公式サイトをご確認下さい。
基本的な使い方は、ffplay.exe に再生したい動画ファイルのパスを指定するだけです。
ffplay ファイル名
ffplay.exe P:\movie\浜辺.mp4
実行すると下記のようなシンプルな動画再生画面が表示されました。画面をマウス右ボタンで左にドラッグすると巻き戻し、右にドラッグすると早送りになりますが、それ以外の操作はできず、メニューも全く表示されません。
動画の情報表示(ffprobeの使い方)
動画や音声ファイルの情報は ffprobe.exe を使用します。こちらもオプションがたくさん用意されていますので、詳細については こちらの公式サイトをご確認下さい。
ffprobe ファイル名
ffprobe.exe P:\movie\ゲーム大会.MP4
実行すると下記の情報が表示されます。
まとめ
今回は 無料で使える動画編集用ツール ffmpeg のダウンロードとインストール、及び基本的な使い方について解説しました。
動画編集ツールは様々なメーカーから販売されていますが、データ分析で動画を使う場合は不要な機能が多く、また処理対象の動画が多い場合は作業が煩わしくなります。
その点、ffmpeg はコマンドラインで実行できるため、動画本数が多くても簡単に処理できます。
ffmpeg には数多くのオプションがありますが、動画から画像や音声を取す、画像を反転させる、動画を分割&結合する、フォーマット変換を行うなど基本機能は、ほとんどオプションを指定せずとも実行できてしまいます。
かなり強力なツールなので、是非皆さんも使ってみて頂ければと思います。
コメント