日々適当

hibitekitou

ffmpegでProRes変換

mac |2017-07-05
多分、今もってAppleの名前が映像方面に出てくる大きな理由がProResの存在だと思います。

Apple ProRes について [Apple サポート]
Apple ProRes ホワイトペーパー(pdf)

Appleは一応、世のProResをサポートするアプリを「承認」しているようで、承認された製品のリストを公開しています。

Apple ProRes の使用が承認されている製品 [Apple サポート]

これ、勘違いしがちなんですが、どうも、これら製品はAppleにライセンス料を支払って実装している、というものではないようなのですね。その辺について記された記事が「VEGASのProResはApple未承認だが違法ではなかった件 」[映像知識のメモ帳] です。それによると未承認のものでエンコード・デコードを行っても、法律的な問題は生じないということで、自己責任で使用する分には何ら障害はないようです。

ということで、ProRes変換するのにffmpegという選択肢が出てきます。MacだとHomebrew使って入れるのが簡単です。

以下 ffmpeg で動画や静止画連番をProResのmovファイルに変換するのを目的とします。音声はとりあえず無視。

ffmpegの動画変換の最も基本的な書式は

ffmpeg -i 入力素材 出力

ということで、拡張子を見て自動的に変換をかけてくれます。

-i オプションで映像ソースを指定するわけですが、連番ファイルの場合、例えば srcimage.0001.png みたいな命名ルールの連番ファイルの場合、 srcimage.%4d.png って書き方ができるみたいです。

が、当然ながらCodecの指定とかはこれではできないので、様々なオプションを駆使します。これが結構大変。

ProResに関するオプションです。

-codec:v prores_ks
proresってオプションもありようで、こっちの方がprores_ksより高速みたいですけど、ビットレートやインターレース周りで問題のあるものが出来上がる可能性があるようですね。
-profile:v
0:ProRes422 Proxy
1:ProRes422 LT
2:ProRes422 Normal
3:ProRes422 HQ
4:ProRes444?:prores_ksを使っているときに利用可能、かな?
-pix_fmt
-YUV422P10
-YUV444P10
-YUVA444P10
prores_ksのときに選べるオプションですかね。
-bits_per_mb
参考にしたところで指定されていたのだけど、とりあえず最大値は8000みたいです。(200〜2400)
-quant_mat
参考にしたところでは指定されていませんでした。量子化マトリクスの指定ってことのよう。proxy、lt、standard、hq、auto)
-mbs_per_slice
参考にしたところでは指定されていませんでした。1〜8。デフォルトは8だそうです。
-vendor
ap10とか指定すると、Appleのエンコーダが作ったものと偽ることができる?模様。参考にしたところでは指定されていませんでした。


ビデオファイルそのものに関するオプションです。当然ながらこれ以外に様々なオプションがあるけど、とりあえず。

-r
フレームレートの設定。映像ソースのフレームレートを強制的に設定する場合には -i オプションの前に書くようですね。連番ファイルを読み込むときには必須でしょう。-i オプションの後ろに書くと、出力ファイルのフレームレートの設定となるようです。
-s
フレームサイズの指定。1920x1080みたいに指定。入出力にサイズの差がなければいらない設定ですね。
-an
音無しで書き出す時のオプション。
-vf
ビデオフィルタ。ここではカラースペースの変換に使ってみたり。scale=in_color_matrix=bt2020:out_color_matrix=bt2020 とか。bt2020やbt709が馴染み深いパラメータっすね。


というわけで、連番のpngファイルをProResファイルの書き出すためのコマンドはこんな風になりました。
ソースは colorbar_#####.png って名前の連番ファイル(AE上でRec.709の色空間で編集し、出力したもの。アルファチャンネル付き。)。出力は一つ上の階層にoutMov.movで出しています。

ffmpeg -r 30 -i colorbar_%5d.png -r 30 -an -codec:v prores_ks -pix_fmt yuva444p10 -profile:v 4 -bits_per_mb 8000 -vf scale=in_color_matrix=bt709:out_color_matrix=bt709 ../outMov.mov

ちなみに、MacBook Pro 2016で走らせたところ、HD解像度で0.207倍の速度での変換となりました。遅っ。

で、元のpngと出来上がったmovをAE上で重ねてみました。PNGを作るとき、AEのカラー設定はHDTV(Rec.709)にしていたので、それと同じカラー設定のプロジェクト内で比較する限り、差は見受けられませんでしたんで、概ねこれでいいのかな、という感じです。
ちなみに、-vf scale=in_color_matrix=bt709:out_color_matrix=bt709 をつけずに変換したものは色が結構変わってしまっております。
もっとも、出力されたmovファイルにカラープロファイルは埋め込まれないようです。

で、試しにCompressorでPNG連番読み込んでの書き出しをして見たのだけど、色が変わってしまうんで、こっちの問題の解消もしていかんといかんなぁと思っているところ。
こっちはカラープロファイルはITU-R BT.709ってのが埋め込まれているんですよね。
あと調べてみると、ビットレートがだいぶ違いますな。ffmpegの先の設定で出力したものは22.4Mbit/sなのに対し、CompressorのProRes 4444のプリセットで出力したものは32.4Mbit/s。これによりどんな差が生まれるか分かりませんが、色の問題さえ解消できるなら、Macでは素直にCompressorを使っておいた方がいいんでしょうね。

とりあえず…
コメント ( 0 )|Trackback ( )
  ・