実験: Aviutlでカット編集だけしてQSVEncCのavqsv使用
Aviutlでカット編集だけしてQSVEncCのavqsv使用…とか書くと、いったい何の話だ、という感じだけど、それを実験してみた。
とりあえず、Aviutlでカット編集だけして、あとはQSVでデコードからエンコードまで一括で行える。
実験概要
QSVEnc.auoを使えば、AviutlからQSVを使ってエンコードできるのだけど、QSVEncCでエンコードするときよりだいぶ遅い、という問題がある。
まあ、QSVEncCと違ってデコードをCPUで行い、Aviutlのフィルタパイプラインを通るので、余分な処理が多くなっていて、どうしようもなく遅くなってしまうのだと思う。Aviutlが動画編集のためのソフトウェアであることを考えると、まあ、当たり前だろう。
ところが、AviutlでQSVEnc.auoを使う場合であっても、速度を重視する場合には、フィルタなどを全くかけず、カット編集だけしてエンコードしている場合も、まあ、きっとあるのではないかと思う。この場合、QSVEncCのavqsvを使えば高速化できるのだけど、カット編集したいからAviutlを使っていることになる。
じゃあ、Aviutlでカット編集しつつ、QSVEncCのavqsvを使って高速化できないのか、という実験。
結構インチキ臭いことになって、制約もいろいろつくけど、その代わり結構速くなった。
準備
1. こちらから実験用のzipをダウンロードする。
2. Aviutlのpluginフォルダにzipファイル内の以下のファイルをコピーする。
QSVEnc.auo
QSVEnc.ini
AuoLink.auf [ AuoLinkフォルダ内 ]
3.Aviutlフォルダにzipファイル内の以下のファイルをコピーする。
[ "QSVEncC\x86" フォルダ内 ]
avcodec-57.dll
avformat-57.dll
avutil-55.dll
swresample-2.dll
4.Aviutlを起動して、lwinput.auiで動画を読み込み、カット編集する。
5.AuoLinkフィルタを有効にする。
これで、QSVEnc.auoからavqsvが利用可能になる。入力ファイルの情報と、カット編集の情報がQSVEnc.auoに渡されるようになる。

6. 普通にAviutlからQSV出力画面を開く。
AuoLinkフィルタが有効になっていると、AuoLinkモードに移行して、設定画面が少し変化する。
「avqsvで直接エンコードを行う」にチェックを入れる。

7. エンコード開始
avqsvが対応している入力ファイルなら、avqsvを使用して高速にエンコードされる。
注意
変則的な動作になるため、あまりに多くの制限が発生します。まとめるとQSVEncCでできることしかできません。
・Aviutlのフィルタをスキップするので、Aviutl側のインタレ解除・フィルタ類の設定は反映されません。
・512個以上のカット編集には対応していません。可変長で領域とるのはめんどくさいのです。
・tsなどでカット編集の同期がとれるのはlwinput.auiだけです。例えば、m2v.auiを使うとずれました。これは先頭のフレームをどのフレームにするかが異なるためです。mpgとかmp4とかの先頭がきれいなやつは大丈夫なはずです。
・avqsvのfps判定とAviutlの入力プラグインのfps判定が異なる場合、カット編集の位置がずれます。
・avqsvにより読み込めないファイルはエンコードできません。
・追加読み込みなどでソースファイルが複数存在する場合は使用できません。
・音声を別ファイルから読み込んでいる場合、それは反映されません。
・入力がRFFやVFRなどの場合には対応していません。盛大に音ズレしましすし、カット編集した場合に盛大にずれます。
・QSVEnc.auoの音声エンコードやmux関連機能(チャプター読み込みなども)も使用できません。
結果
環境
Win8.1 x64
Core i7 6700K 4C/8T @ 4.2GHz <Skylake>
DDR4-3200 2ch 16GB
Intel HD Grpahics 530 (Intel 4312ドライバ)
Aviutl 1.00
QSVEnc 2.23 実験版
lwinput.aui rev 820
入力
MPEG2 ts 1920x1080i 29.97fps
出力
CQP=22:26:29, インタレ保持, 品質 = 6 (faster)
通常の出力 = 92fps

通常のAviutl出力。まあ、そんなに速くない。
avqsv使用 = 200fps

Aviutlの過程をすっ飛ばしているので、それなりに速くなっている。
というわけで、Aviutlでカット編集をしつつ、avqsvで高速にエンコードできた。ついでにAviutlのバッチ登録機能が使えるので、Aviutlにエンコジョブ管理をしてもらうこともできるという利点もあるかもしれない。
というかまあ、本来はこういうのはエクスポートプラグインにするのだけど、なんで無理矢理出力プラグインとして作ったかというと、エクスポートプラグインはバッチ登録できないから。こういうちょっとでも時間のかかる出力にはエクスポートプラグインはあまり実用的じゃない。
今後
あまりにややこしい制約事項が多すぎて、わかりにくいので、今後もQSVEnc.auoにこの機能を入れるかは迷っています。
まあやってみて面白かったけど、そもそも需要あるんかな?
というところです…
実験用のzip
とりあえず、Aviutlでカット編集だけして、あとはQSVでデコードからエンコードまで一括で行える。
実験概要
QSVEnc.auoを使えば、AviutlからQSVを使ってエンコードできるのだけど、QSVEncCでエンコードするときよりだいぶ遅い、という問題がある。
まあ、QSVEncCと違ってデコードをCPUで行い、Aviutlのフィルタパイプラインを通るので、余分な処理が多くなっていて、どうしようもなく遅くなってしまうのだと思う。Aviutlが動画編集のためのソフトウェアであることを考えると、まあ、当たり前だろう。
ところが、AviutlでQSVEnc.auoを使う場合であっても、速度を重視する場合には、フィルタなどを全くかけず、カット編集だけしてエンコードしている場合も、まあ、きっとあるのではないかと思う。この場合、QSVEncCのavqsvを使えば高速化できるのだけど、カット編集したいからAviutlを使っていることになる。
じゃあ、Aviutlでカット編集しつつ、QSVEncCのavqsvを使って高速化できないのか、という実験。
結構インチキ臭いことになって、制約もいろいろつくけど、その代わり結構速くなった。
準備
1. こちらから実験用のzipをダウンロードする。
2. Aviutlのpluginフォルダにzipファイル内の以下のファイルをコピーする。
QSVEnc.auo
QSVEnc.ini
AuoLink.auf [ AuoLinkフォルダ内 ]
3.Aviutlフォルダにzipファイル内の以下のファイルをコピーする。
[ "QSVEncC\x86" フォルダ内 ]
avcodec-57.dll
avformat-57.dll
avutil-55.dll
swresample-2.dll
4.Aviutlを起動して、lwinput.auiで動画を読み込み、カット編集する。
5.AuoLinkフィルタを有効にする。
これで、QSVEnc.auoからavqsvが利用可能になる。入力ファイルの情報と、カット編集の情報がQSVEnc.auoに渡されるようになる。

6. 普通にAviutlからQSV出力画面を開く。
AuoLinkフィルタが有効になっていると、AuoLinkモードに移行して、設定画面が少し変化する。
「avqsvで直接エンコードを行う」にチェックを入れる。

7. エンコード開始
avqsvが対応している入力ファイルなら、avqsvを使用して高速にエンコードされる。
注意
変則的な動作になるため、あまりに多くの制限が発生します。まとめるとQSVEncCでできることしかできません。
・Aviutlのフィルタをスキップするので、Aviutl側のインタレ解除・フィルタ類の設定は反映されません。
・512個以上のカット編集には対応していません。可変長で領域とるのはめんどくさいのです。
・tsなどでカット編集の同期がとれるのはlwinput.auiだけです。例えば、m2v.auiを使うとずれました。これは先頭のフレームをどのフレームにするかが異なるためです。mpgとかmp4とかの先頭がきれいなやつは大丈夫なはずです。
・avqsvのfps判定とAviutlの入力プラグインのfps判定が異なる場合、カット編集の位置がずれます。
・avqsvにより読み込めないファイルはエンコードできません。
・追加読み込みなどでソースファイルが複数存在する場合は使用できません。
・音声を別ファイルから読み込んでいる場合、それは反映されません。
・入力がRFFやVFRなどの場合には対応していません。盛大に音ズレしましすし、カット編集した場合に盛大にずれます。
・QSVEnc.auoの音声エンコードやmux関連機能(チャプター読み込みなども)も使用できません。
結果
環境
Win8.1 x64
Core i7 6700K 4C/8T @ 4.2GHz <Skylake>
DDR4-3200 2ch 16GB
Intel HD Grpahics 530 (Intel 4312ドライバ)
Aviutl 1.00
QSVEnc 2.23 実験版
lwinput.aui rev 820
入力
MPEG2 ts 1920x1080i 29.97fps
出力
CQP=22:26:29, インタレ保持, 品質 = 6 (faster)
通常の出力 = 92fps

通常のAviutl出力。まあ、そんなに速くない。
avqsv使用 = 200fps

Aviutlの過程をすっ飛ばしているので、それなりに速くなっている。
というわけで、Aviutlでカット編集をしつつ、avqsvで高速にエンコードできた。ついでにAviutlのバッチ登録機能が使えるので、Aviutlにエンコジョブ管理をしてもらうこともできるという利点もあるかもしれない。
というかまあ、本来はこういうのはエクスポートプラグインにするのだけど、なんで無理矢理出力プラグインとして作ったかというと、エクスポートプラグインはバッチ登録できないから。こういうちょっとでも時間のかかる出力にはエクスポートプラグインはあまり実用的じゃない。
今後
あまりにややこしい制約事項が多すぎて、わかりにくいので、今後もQSVEnc.auoにこの機能を入れるかは迷っています。
まあやってみて面白かったけど、そもそも需要あるんかな?
というところです…
実験用のzip
スポンサーサイト