ffmpeg で PinP 動画を作成する

私のドライブレコーダーは、 1 つのファイルにフロントの動画とリアの動画を入れたマルチビュー動画を作ります。これがけっこう厄介で、メーカーの専用ソフトを利用しないとうまく動画を見ることができません。そこで、ファイルにあるフロントとリアの動画を分離し、 Picture in Picture の動画にしようと思います。

説明するのが苦手なので、ソースコードを提示します。

ffmpeg -i input.AVI -map 0:0 output_front.mp4
ffmpeg -i input.AVI -map 0:1 output_rear.mp4
ffmpeg -i output_front.mp4 -i output_rear.mp4 -filter_complex "[1]scale=iw/4:ih/4 [pip]; [0][pip] overlay=main_w-overlay_w-20:main_h-overlay_h-20" PinP.mp4

3 行になってしまいましたが、入力としては input.AVI が 1 つ。中間生成ファイルとして output_front.mp4 と output_rear.mp4 の 2 つ。そして最終的なファイルは PinP.mp4 となります。当然ですが、中間生成ファイルは削除してもかまいません。ドラレコの動画は 30 秒で 1 つのファイルになっていますので、上記 3 行を複数回実行して、結合することになります。今回は、 3 行目の PinP 動画を作成する部分を中心に以下で説明していきます。

PinP 動画を作成するオプション

私自身、完全にこのオプションを理解しているわけではないので、間違った説明をしていたら、指摘してください。

まず、入力として 2 つのファイルを取ります。上記の例で行くと、 output_front.mp4 と output_rear.mp4 です。この 2 つの位置関係は重要で、最初に指定したファイルがメインになり、 2 つめに指定したファイルがオーバーレイするサブ動画になります。

※後ほど[0]、[1]という指定が出てきます。これが、最初のファイル、 2 つめのファイルを意味します。順序を逆にした場合、[0]、[1]の指定も逆転させてください。

次に、 PinP 動画のサイズを指定しましょう。[1]ファイル(この順番で行くと output_rear.mp4 )は scale=iw:ih という部分でサイズ指定します。上記の例だと、縦横ともに 1/4 にします。これを 1/2 にしたい場合は、 scale=iw/2:ih/2 とします。そして、そこにラベルを指定します。上記の例では[pip]としている部分ですが、ここは任意の文字列でかまいません。直後で指定します。

次に PinP 動画の位置を指定します。 main_w-overlay_w-20 、 main_h-overlay_h-20 が PinP 動画の位置を示します。ここでは X 座標、 Y 座標ともに 20 ピクセルを指定しているのですが、ここの指定方法は正直よく分かっていません。 40 ピクセルを指定する場合は、 40 をしてすれば良いのはわかるのですが、「 FFmpeg Filters Documentation 」ここを見ると、前半の main_w 、 main_h が 0 指定されているのがよく分かりません。ここにも数字を入れると PinP 動画がずれて ( その座標分 ) 生成されますので、オフセットと考えれば良いのかもしれません。

いずれにしても、 overlay_w 、 overlay_h のあとに数字でその生成位置を指定すると言うことのようです。座標指定の方法については後ほどまた調べて追記します。

filter_complex オプションでまとめ上げる

大きさと位置を指定したものぜんぶをダブルクォーテーションでまとめて、 filter_complex オプションでまとめ上げます。本来、ダブルクォーテーションでまとめる必要はないのですが、指定に際してスペースが必要になりますので、全体をひとまとめにする意味で、ダブルクォーテーションマークが必要になるみたいです。

最初、全て平打ちしてエラーが連発していました。よく sample を見たら“”で囲われています。なるほどそういうことかと思った次第です。

最後に出力ファイルを指定して完成です。

投稿者プロフィール

會澤 賢一
新潟県在住。1964年生まれ、東京オリンピックの年ですね。
突然燃え上がったり、鎮火したり興味の波が激しいので注意が必要です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください