メニュー ホーム

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年生まれ、東京オリンピックの年ですね。
突然燃え上がったり、鎮火したり興味の波が激しいので注意が必要です。

カテゴリー:ノン・カテゴリ

タグ:

會澤 賢一

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

お気軽にコメントを残していってください