ユニファ開発者ブログ

ユニファ株式会社システム開発部メンバーによるブログです。

ffmpegでクロマキー合成!

こんにちは。 エンジニアの田渕です。

3月に入り、だんだんと日が長くなってきたなぁと感じます。 気づけば今年も既に3ヶ月が経とうとしています……。 月日の流れに負けぬように精進せねばと思います。

さて、今回のタイトルは「ffmpegでクロマキー合成!」です。 タイトル通り、ffmpegを使って、動画のクロマキー合成をしてみよう、という内容です。
「クロマキー合成ってなに?」から、実際にffmpegを使ってクロマキー合成してみるコマンドの紹介までをやって行きたいと思います!

クロマキー合成ってなに?

クロマキー合成、名前だけは聞いたことがある方もいらっしゃるのではないでしょうか。
クロマキー合成とは、

特定の色の成分から映像の一部を透明にし、そこに別の映像を合成する技術 (wikipediaより)

のことです。

日常的に一番見かけるのは、テレビの天気予報での利用。 あとは、映画やドラマなどでの危険なシーンでの利用。 グリーンバックやブルーバックと呼ばれる、単一色の背景の前で撮影し、 それを他の映像と合成したりして利用します。

背景はグリーンやブルーじゃなきゃいけないのか?

動画の合成というと、緑色の背景の前で撮影しているイメージが強いかと思いますが、必ず緑じゃないといけないのでしょうか?
前述の通り、そもそもは「特定の色の成分から映像の一部を透明」にする技術なので、実は背景は緑や青でなくても良いのです。 ではなぜ、緑や青が使われているかと言うと、人の肌の色と補色関係にあるからです。 簡単に言えば、合成したい素材と似たような色の背景の前で撮影してしまうと、思ったように合成出来ない、という話。

人を素材として合成することが多い為、肌の色に合わせてグリーンやブルーの背景を利用することが多いのです。

理論はさておき

そんなわけで今回は、緑背景ではなく、白背景の動画と、普通の動画を合成してみたいと思います。 素材は、下記からお借りしました。

素材|After Effects Style|初心者からはじめるAfter Effectsの使い方

利用したのは、こちらの二点。

  • 元動画(空の動画)
  • 上に乗っける動画(ノイズ動画)

解像度や、秒数を合わせました。 ノイズ動画の「白い色」を透明にして、空の動画の上に乗せる形になります。

ffmpegとは?

その前に、今回利用するffmpegについてもちょっとご紹介。 ffmpegは、動画や音声を扱う為のフリーソフトの一つです。 コマンドラインから使用することが出来ます。

FFmpeg

このffmpegには、クロマキー合成をする為のオプションがあり、今回はそれを利用しました。 詳細な説明は、下記公式ドキュメントを参照ください。

FFmpeg Filters Documentation

ffmpeg Documentation

合成してみる!

ということで、ffmpegのコマンドを利用して、実際に合成してみます。

合成のコマンドはこんな感じ。説明の為、ファイル名を日本語にしておりますが、実際やるときは英語名を使っています。

ffmpeg -i 雲動画.mp4 -i ノイズ.mp4 -filter_complex “[1:v]colorkey=0xFFFFFF:0.3:0.2[ckout];[0:v][ckout]overlay[out]” -map “[out]” output.mp4

緑と青の部分が、それぞれ先に紹介した合成前の動画、赤い文字は、「白」を表すカラーコードです。 「緑文字と青文字の動画使って、青文字の動画の白を透明にして合成してね」というコマンドです。

結果はこうなります。

雲の流れる動画の上に、ノイズが重なってるのがわかるでしょうか。 これを使えば、プログラムを利用して動画の加工などが出来そうです。

今回は画像のみの動画の合成のご紹介でしたが、ffmpegでは音声つき動画同士のクロマキー合成も行えます。 (もっとコマンドが、複雑で長くなりますが……。) ffmpegでクロマキー合成している日本語のドキュメントは殆ど見かけない為、調査が少々大変ではありますが、出来上がると中々楽しいです。
ご興味のある方は試してみてください。

それでは!