はじめに
これは、己に宛てた備忘録として記すものとする。
ゆっくりムービーメーカー4の動画出力に関する事情
まず前提として、ゆっくりムービーメーカー4の動画出力は以下の方法がある。
- exo出力(Aviutl向けの出力方法。PSD立ち絵など、Aviutl側が対応していないものも存在する)
- 動画出力
- MediaFoundation出力(初心者でもやりやすいが、色空間がYUV、色深度も8bitのため、HDR出力に対応していない)
- FFmpeg出力(コマンドラインを分からないとほぼ確実に詰むが、わかってしまえばHDR出力も可能)
今回は、2.の「FFmpeg出力」で極限まで足掻いた話である…。
ソフトウェアエンコードでやろうだなんて考えたくもねぇよ!
まず真っ先に、「CUDAを用いたハードウェアエンコード」を考えた。FFmpegには、「hevc_nvenc」と呼ばれるエンコーダが存在する。これを用いれば、理論上はハードウェアエンコードが可能…なのだが、ゆっくりムービーメーカー4の場合はそもそもハードウェアアクセラレーションの設定が不可能である(エラーが出る)。そのため、エンコーダにhevc_nvencを採用するのはアリだが、ハードウェアアクセラレーションの機能自体を使用することはできない。だからといってソフトウェアエンコードは遅いので勘弁願いたい。
声を追い、彷徨っては躓く
FFmpegのフィルタ機能を用い、最初はcolorspaceフィルタでエンコードをかけたが、YUVだしなんか色伝達もヘンだしで、結局8bitのままだった。だが、そこに救世主現る。
「zscale」である。
input系にbt709を指定し、目標にPQ指定を行った。が…相変わらずHDRとしての認識はない。なぜかリミテッドレンジとして認識されているな、と思ったら「ビットストリームフィルタ」なるものを設定しないといけないらしい。どうりで、フルレンジとして認識されないわけだ。
最終的に、コマンドは普通にカオス極まる状態になった。俺はいつから呪文を書いていたのだろうかと頭を抱える羽目になった。
-movflags +faststart -c:v hevc_nvenc -preset p7 -tune hq -profile:v main10 -level 5.2 -tier high -rc cbr -force_key_frames expr:gte(t,n_forced*2) -cbr true -pix_fmt:v p010le -tag:v hvc1 -vf zscale=w=0:h=0:d=none:rin=limited:r=full:pin=709:p=bt2020:tin=709:t=smpte2084:min=709:m=bt2020nc -bsf:v hevc_metadata=video_full_range_flag=1:colour_primaries=9:transfer_characteristics=16:matrix_coefficients=9
わけがわからないよ。
2025/02/13更新:mkvmergeを使いましょう
MKVMergeを使えば確実にHDRにできる。


コメント