mmfft9にタイトル指定コマンドラインオプションを追加
開発::util
序
mmfft9の改修でmmfft9-q.rb
コマンドに-n
オプションでタイトルを指定できるようになった。
これにより、サブディレクトリ構造を保った動的な出力が可能になった。
解説
前提として、mmfft9のソースファイルは
$source_root/$prefix/$source_file_path
となり、出力ファイルは
$output_root/$title/$filename.webm
となる。
$source_root
,
$output_root
はグローバルの設定ファイルにより定義されるもの、$prefix
,
$title
はタイトル別設定ファイルにより定義されるもの、$source_file_path
はキューファイルに記載するもの、$filename
はキューファイルから導出されるものである。
このため、前提として「タイトル別のディレクトリをつくり、そこに設定ファイルを作り、タイトル別の出力ディレクトリに吐かれる」となっている。
だが、例えばカメラで撮ったデータを1970-01-01
のようなディレクトリにして、これを1970-01-01
ディレクトリに吐く……ということをしようとすると、ディレクトリごとに設定ファイルを設置する必要がある。
実はそれ自体は割と合理的ではある。 というのも、カメラ撮影データがソースだと、その内容によってパラメータの調整が必要となり、全体で一括の設定を適用しづらいからだ。 とはいえ、例えばアクションカメラで撮ったドライブの映像など、ある程度ソースが決まったものであればパラメータ固定で変換したいこともある。
だが、従来であれば$source_file_path
によってサブ階層のファイルを変換対象にすることはできても、ひとつの設定ファイルから生成されている動画はすべて同じディレクトリに吐かれていた。
この問題は$title
が設定ファイルによって提供されるものに固定されていたためで、コマンドラインでタイトルを与えることができればこの問題は解消される。
そこで、mmfft9-q.rb
コマンドに-n
オプションを追加し、それを可能にした。つまり、
for i in *(/)
do
print -l $i/*.mp4 > list.$i
mmfft9-q.rb -n $i list.$i
done
のようにして一気に処理することができる。
ついでにAV1もサポート
mmfft9はVP9エンコーディングのためのソフトウェアであり、今もパラメータを詰める意味でも実用性の意味でもVP9(libvpx-vp9
)がベストだと考えているが、時代の流れを考えてAV1もサポートした。
サポートされているコーデックはaom-av1, SVT-AV1, AV1 AMFである。 AV1 AMFもサポートしようかと思っていたのだが、うまく
ff_options.vcodec: av1
であるとき、aom-av1が使われる。
オプションはvpx-vp9と互換性があるため、そのまま利用可能。
猛烈に遅い。
ff_options.vcodec: svt-av1
であるとき、svt-av1が使われる。
SVT-AV1はCPU効率がvpx-vp9よりも高いため、このオプションを指定することで時短できる。
このコーデックで有効なのはbv
, crf
,
tbr
, max
オプションだけである。
また、2passエンコーディングはサポートしない。
ff_options.vcodec: amf-av1
であるとき、AV1
AMFが使われる。
AMFによるAV1は動作条件が結構シビアなので失敗しないように要注意。
有効なオプションはbv
, qmin
, qmax
,
quality
。 qmin
, qmax
,
quality
はav1_amf
のオプションそのままになる。
2passエンコーディングはサポートしない。 AV1
AMFに関してはオマケのようなものなので、あまり期待してはいけない。