QSVEnc 0.15

機能の追加と問題の修正。

[共通]
・実験1 シーンチェンジ検出によるIフレーム挿入機能を追加。
・実験2 可変QPモードを追加。
両方とも入力がプログレッシブ(非インタレ)の時のみ有効。

・エンコード後、フレームタイプごとの総サイズを表示。

[QSVEnc]
・自動フィールドシフト使用時に不安定だった問題を修正。

・その他の設定にタイマー精度を向上させる設定を追加。

・エンコ前後バッチ処理を最小化で実行する設定を追加。
その他の設定から。


・タイマー精度を向上させる設定

これはスレの方にあった話。具体的にはtimeBeginPeriod(1)によってタイマー精度を向上させると、高速化するという。とりあえず、その他の設定の「エンコ中、タイマー精度を向上させる」にチェックを入れておくと、エンコ開始時にtimeBeginPeriod(1)、エンコ終了後timeEndPeriod(1)するようにした。

このtimeBeginPeriod、一時期某チューナボードの問題で有名になってたと思う。

メリットとしては、Sleepなどの精度が上がり、必要なときにスレッドがすぐ復帰するようになること。

一方、デメリットとしてはtimeBeginPeriodがOS全体に作用するため、スレッド切り替えが増え、そのオーバーヘッドが増大すること。OSは大量のスレッドをバックグラウンドで動かしているため、その切り替えが大量に発生すれば、そのコストが…ということだ。ほかには消費電力が増えるらしいけど、そんなことははぶっちゃけどうでもいい。あとはタイマー精度が悪いことを期待しているプログラムとかに影響が出るかも…ぐらいかな。まあそんなのないか。

メリットの効果がデメリットの効果を上回れば高速化すると思う。多くの場合、QSVEnc実行中はCPU使用率は低めなので、デメリットが強く出ることはないと思う。

ちなみにわたしの環境ではなにも変わらなかったが、もうすでにtimeBeginPeriod(1)がどこかで使われているのかな?


・実験1 シーンチェンジ検出によるキーフレーム挿入
※ここでいうキーフレームはH.264のIDRフレームのこと。

QSVへの入力がプログレッシブの時専用。

以前話したように、Intel Media SDKにはキーフレームを自動で挿入する機能が付いている…はずなのだが、これがハードウェアエンコード(QSV)では動作しない、そしてその見込もない、という残念なことになっていて、そのため、GOP構造は常に固定である。

一方、Intel Media SDKには、「指定した任意のフレームをキーフレームにする機能(API)」が用意されている。しかし、当然ではあるがこれはどこをキーフレームにするかはこちらで指定してやらないといけない。そこで、自前でシーンチェンジ検出を行って、シーンチェンジだと推定できたら、そのフレームをキーフレームに指定するような機能を追加した。

一般的にはシーンチェンジの際にキーフレームを投入すると、画質が向上する、と言われている。まあ画質の悪い静止画動画なんかで、シーンチェンジの際にキーフレームをちゃんと入れてやらないと、微妙にボケたり、ひどいときにはゴミが残ったりすることからもわかると思う。

実際やってみると、エンコする動画にもよるけど、わずかに画質が向上し、わずかに圧縮率が向上することが多い。

ただ、どうしても速度が落ちる。まあ、いままでやってなかった計算を追加するわけだし、あとはまだコードも悪いのかもしれないし。最初適当に書いたら150fps近かったエンコ速度が15fpsぐらいまで落ちて途方に暮れたりした。さすがにこれだと遅すぎて使えないので、SIMD化・分割並列化・パイプライン並列化などを使って速度上げたけど、それでもまだ5%ぐらい遅くなる。

検出方法も相当適当なんで、ひかえめに入れているはず。なので検出漏れとか、誤爆してるところとかもあるけど…「まあまあ」「そこそこ」な精度だと思う。


・実験2 可変QPモードの追加

QSVへの入力がプログレッシブの時専用。

どう可変にするかというと、CQPをベースに、ややCBRよりに近づける感じ。CQPだとレート変動が激しすぎるので、それを若干抑えこんだようなモードがあってもいいかな、ということ。

動きの激しいところはもともと画像が破綻している場合がある。そんなところを生真面目にエンコードしてもしょうがないかな…ということで、この可変QPモードはそういうもともと汚いところからビットレートを少し取り上げて、動きの少ないところへビットレートを配分する。なので、CQPと比べるとあまり動かないところの画質がやや向上して、動きの激しい部分の画質がやや低下する。

具体的には、CQPモードでこんなかんじの動画を、

qsvenc_cqp_sample



VQPではこんなかんじのビットレート配分にする。

qsvenc_vqp_sample

Intel Media SDKに「フレームごとにQP値を指定する」機能(API)があるので、それを使ってPフレームとBフレームのQP値を上下することで調整している。調整の量はエンコ速度優先なこともあり、わりと適当に決めている。


・自動フィールドシフト使用時に不安定だった問題を修正。

たまに不安定になっていた原因と思うものをひとつ発見し、修正。なんか不安定…だった方いたら申し訳なかったです。


・エンコ前後バッチ処理を最小化で実行する設定を追加。

その他の設定から。x264guiEx 1.68の追加機能の反映。


お願い: 保存したQSVEncの設定をロードする際に、データ保持の関係上、シーンチェンジ検出にチェックが入ってしまう場合があります。もし不要な場合にはチェックを外すようお願いします。



QSVEnc ダウンロード>>
※v2はシーンチェンジ検出時、中断できない問題の修正です。



スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

rigaya

Author:rigaya
アニメとか見たり、エンコードしたり。
連絡先(@を半角にしてください!)
rigaya34589@live.jp
github

最新記事
最新コメント
カテゴリ
月別アーカイブ
カウンター
検索フォーム
いろいろ
公開中のAviutlプラグインとかのダウンロード

○Aviutlプラグイン
x264guiEx 2.xx (ミラー)
- x264を使用したH264出力
- x264guiExの導入>
- x264.exeはこちら>

x265guiEx (ミラー)
- x265を使用したH.265/HEVC出力
- x265.exeはこちら>

QSVEnc + QSVEncC (ミラー)
- QuickSyncVideoによるH264出力
- QSVEncCはコマンドライン版
- QSVEncC 導入/使用方法>
- QSVEncCオプション一覧>

NVEnc + NVEncC (ミラー)
- NVIDIAのNVEncによるH264出力
- NVEncCオプション一覧>

VCEEnc + VCEEncC (ミラー)
- AMDのVCEによるH.264出力

ffmpegOut (ミラー)
- ffmpeg/avconvを使用した出力

自動フィールドシフト (ミラー)
- SSE2~AVX2による高速化版
- オリジナル: aji様

エッジレベル調整MT (ミラー)
- エッジレベル調整の並列化/高速化
- SSE2~AVX対応
- オリジナル: まじぽか太郎様

バンディング低減MT (ミラー)
- SSE2~AVX2による高速化版
- オリジナル: まじぽか太郎様

PMD_MT (ミラー)
- SSE2~FMA3による高速化版
- オリジナル: スレ48≫989氏

透過性ロゴ (ミラー)
- SSE2~FMA3によるSIMD版
- オリジナル: MakKi氏

AviutlColor (ミラー)
- BT.2020nc向け色変換プラグイン
- BT.709/BT.601向けも同梱

○その他
x264afs (ミラー)
- x264のafs対応版

aui_indexer (ミラー使い方>)
- lsmashinput.aui/m2v.auiの
 インデックス事前・一括生成

auc_export (ミラー使い方>)
- Aviutl Controlの
 エクスポートプラグイン版
 エクスポートをコマンドから

aup_reseter (ミラー)
- aupプロジェクトファイルの
 終了フラグを一括リセット

CheckBitrate (ミラー, 使い方, ソース)
- ビットレート分布の分析(HEVC対応)

チャプター変換 (ミラー使い方>)
- nero/appleチャプター形式変換

エッジレベル調整 (avisynth)
- Avisynth用エッジレベル調整

メモリ・キャッシュ速度測定
- スレッド数を変えて測定

○ビルドしたものとか
L-SMASH (ミラー)
x264 (ミラー)
x265 (ミラー)

○その他
サンプル動画
その他

○読みもの (ミラー)
Aviutl/x264guiExの色変換
動画関連ダウンロードリンク集
簡易インストーラの概要

○更新停止・公開終了
改造版x264gui
x264guiEx 0.xx
RSSリンクの表示
リンク
QRコード
QR