Chienomi

mmfft9にタイトル指定コマンドラインオプションを追加

開発::util

  • TOP
  • Articles
  • 開発
  • mmfft9にタイトル指定コマンドラインオプションを追加

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, qualityqmin, qmax, qualityav1_amfのオプションそのままになる。 2passエンコーディングはサポートしない。 AV1 AMFに関してはオマケのようなものなので、あまり期待してはいけない。