QSVEnc 2.29

※OneDriveのほうが2.28のままだったのを修正しました。

QSVEncCの様々な機能強化と以前いただいた要望の反映。要望の反映が遅くなりすみませんでした。

デュアルモノへの対応。
Http Live Streaming(HLS)への対応。
・udp等のプロトコルへの対応。
・音声エンコード高速化。
・ログ改善。

だいぶてんこ盛り。

QSVEnc



コメントいただいたAuoLink時の動作ですが、Aviutlと出力プラグインの情報のやり取りの仕様により、情報をクリアするうまいタイミングがないことが分かりました(どのようにやっても正常な動作が阻害される)。対応できず、申し訳ありません。



QSVEncC



・ffmpeg_dllを更新。
速度の高速化と、udp等の様々なプロトコルのサポートを追加。

ビルド時のコンパイルオプションをバイナリサイズ最小化(-Os)から、速度最適化(-O3)に切り替え、Atom系CPUなどで、音声エンコードがボトルネックになるときなどに高速化。配布パッケージを小さくしたかったので、-Osでビルドしていたけど、やはりコンパイラの最適化でかなり速度が変わるようだ。

環境: Celeron N3150, Win10 x64, 4331ドライバ、QSVEncC 2.29 x64
入力: MPEG2 1440x1080をそのままエンコードし、音声もaacで再エンコードする例。

QSVEnc 2.26同梱dll。142fps。

qsvencc_test_06


QSVEnc 2.29同梱dll。167fps。

qsvencc_test_07

というわけで、CPU処理がボトルネックになっている場合にはかなり効果があるみたい。出力・音声処理の並列化をする前は80fps前後だったので、そのころからは2倍速になったことになる。


・udp等のプロトコルへの対応。
また、ffmpegのdllをnetworkやprotocolsを有効にしてビルドした。これにより、udpのリアルタイムエンコードなどが可能。この場合、以下のようにして--avqsv-analyze を適切に設定しないとエンコードできないことがある。

-i udp://127.0.0.1:1234?pkt_size=262144^&fifo_size=8000000 --audio-codec aac -o test.ts
--output-thread 0 -a 1


使用できるプロトコルは、下記--check-protocolで確認できる。使用方法は、上の例のようにffmpegと同様に入出力ファイル名を指定する。

・dllのバージョンを表示するオプションを追加。
--check-avversion

・avqsv時やmux時にサポートされているプロトコルを表示するオプションを追加。
--check-protocols
現状のサポート状況は以下の通り。

input protocols:
async cache concat crypto
data ffrtmphttp file ftp
gopher hls http httpproxy
https mmsh mmst pipe
rtmp rtmps rtmpt rtmpts
rtp srtp subfile tcp
tls udp udplite

output protocols:
crypto ffrtmphttp file ftp
gopher http httpproxy https
icecast md5 pipe rtmp
rtmps rtmpt rtmpts rtp
srtp tcp tls udp
udplite

・mux時にオプションパラメータを渡すオプションを追加。
-m <string1>:<string2>

以前いただいた要望の反映。主にHttp Live Streaming出力時に必要なパラメータを渡すために使用する。

例として、下記のようにしてHLS用の出力を行うことができる。

-i <input> -o test.m3u8 -f hls -m hls_time:5
-m hls_segment_filename:test_%03d.ts --gop-len 30


単にffmpegにformatのオプションを渡しているようなものなので、そのほかのオプションはこのあたりを参考にしてください。

・libavcodec/libavformatからのエラーメッセージをログファイルに書き出せるようにした。
これまではログファイルに保存されるのは、QSVEncの吐いているログだけで、libavcodec/libavformatからのエラーメッセージはコンソールには表示されるのに、ログファイルは保存されない、ということになっていた。これをちゃんと保存出るようにした。

・音声のサンプリング周波数を変換する機能を追加。
--audio-samplerate [<int>?]<int>
変換先周波数をHzで指定する。

・音声のサンプリング周波数変換時に使用するエンジンを切り替えるオプションを追加。
--audio-resampler <string>
選択肢は"swr"(デフォルト=swresampler)と"soxr"(libsoxr)。

・トラックを指定して、音声チャンネルの分離・統合などを行うオプションを追加。
--audio-stream [<int>?][<string>]
これも以前いただいた要望の反映で、典型的にはデュアルモノ音声などに対し、--audio-stream FR,FLなどとして分離する。
また同時に、音声のチャンネル数を指定するのにも使用することができ、--audio-stream stereoなどとすることで常に音声を2chに変換したりできる。

音声チャンネルの分離・統合などを行う。
--audio-streamが指定された音声トラックは常にエンコードされる。
,(カンマ)で区切ることで、入力の同じトラックから複数のトラックを生成できる。

書式:
<int>に処理対象のトラックを指定する。
<string1>に入力として使用するチャンネルを指定する。省略された場合は入力の全チャンネルを使用する。
<string2>に出力チャンネル形式を指定する。省略された場合は、<string1>のチャンネルをすべて使用する。

例1: --audio-stream FR,FL
最も必要だと思われる機能。デュアルモノから左右のチャンネルを2つのモノラル音声に分離する。

例2: --audio-stream :stereo
どんな音声もステレオに変換する。

例3: --audio-stream 2?5.1,5.1:stereo
入力ファイルの第2トラックを、5.1chの音声を5.1chとしてエンコードしつつ、ステレオにダウンミックスしたトラックを生成する。
実際に使うことがあるかは微妙だが、書式の紹介例としてはわかりやすいかと。

使用できる記号

mono = FC
stereo = FL + FR
2.1 = FL + FR + LFE
3.0 = FL + FR + FC
3.0(back) = FL + FR + BC
3.1 = FL + FR + FC + LFE
4.0 = FL + FR
4.0 = FL + FR + FC + BC
quad = FL + FR + BL + BR
quad(side) = FL + FR + SL + SR
5.0 = FL + FR + FC + SL + SR
5.1 = FL + FR + FC + LFE + SL + SR
6.0 = FL + FR + FC + BC + SL + SR
6.0(front) = FL + FR + FLC + FRC + SL + SR
hexagonal = FL + FR + FC + BL + BR + BC
6.1 = FL + FR + FC + LFE + BC + SL + SR
6.1(front) = FL + FR + LFE + FLC + FRC + SL + SR
7.0 = FL + FR + FC + BL + BR + SL + SR
7.0(front) = FL + FR + FC + FLC + FRC + SL + SR
7.1 = FL + FR + FC + LFE + BL + BR + SL + SR
7.1(wide) = FL + FR + FC + LFE + FLC + FRC + SL + SR





QSVEnc ダウンロード>>
ダウンロード (ミラー) >>
OneDriveの調子がいまいちの時はミラー(dropbox)からどうぞ。同じものです。

QSVEncBenchmark.zipはベンチマーク用です。(約220MBと重いので注意)。run_benchmark.batをダブルクリックで実行です。

QSVEncCのオプションについてはこちら。
QSVEncCオプション一覧>


スポンサーサイト

コメントの投稿

非公開コメント

エンコード中のBuffer Memoryの表示

更新お疲れ様です。

QSVEnc2.28 からだと思うのですが、エンコード中の表示で、Buffer Memoryの部分がunsupportedと表示されるようになりました。

以前までは、自分の環境では d3d11 と表示されていました。

出来上がった動画は特に問題無いのですが、ちょっと気になったので報告しておきます。


Re: エンコード中のBuffer Memoryの表示

報告ありがとうございます。たしかにおかしいですね。

次回修正します。

Skylake の仕様表を見ていると…

Skylake が発売された当時は見落としていたのですが
最近になって仕様表を見なおしてみると
Skylake の新機能のなかに

 Partial VP9 encoding/decoding acceleration.

という一文があることに気づきました

QSV を介した機能ではないのかもしれないので
QSVEnc のスレッドでお願いするべきなのかどうか
ちょっと判断に迷ったのですが
Skylake が備えている
部分的な VP9 のエンコード・アクセラレーション
という機能を QSVEnc もしくは ffmpegout に追加できたりしないでしょうか

※ 素人の思いつきですみません (-_-;

というのも、FFmpeg を使った VP9 エンコードは
オプションを煮詰めても処理速度がびっくりするほど遅いため
ハードウェア支援を受けれるものなら なんでも取り入れたい状況です

YouTube へのアップロードを
VP9 の .webm で行うといくつかメリットがあるので
VP9 エンコードをもっと活用したいという実情もあります

Re: Skylake の仕様表を見ていると…

ああ、ffmpegのVP9は遅いですよね…なんであんなに遅いんでしょう…。

QSVのVP9すこし調べてみました。

VP9/VP8のサポートは、おっしゃるように追加されているようには見えるのですが、実際には使用できませんでした。(i7 6700K / Win10 x64 / 4352ドライバ)

HEVC/VP8/VP9のHWエンコード時には、内部で専用pluginをロードしなければならないのですが、これがHEVCは可能にもかかわらず、VP8/VP9についてはロードできないため、エンコードできない、という状況です。

なにか違う方法があり、それをわたしが見逃しているのかもしれませんが、正直、QSVはドライバの準備が間に合ってないことがよくあるので、これもそのひとつなのかもしれないと思っています。

hls m3u8のリアルタイム生成

お世話になります。私はTvRemoteViewer_VBというストリーミングアプリの作者の片割れをやっています。
さて、トランスコードでQSVが(まともに)使えるようにしてほしいという要望が非常に多く、今回の2.29は渡りに船と思い早速テストしてみました。
まずはQSVEncCをffmpegの置き換えとして使い
-i %VIDEOFILE% -f hls -m hls_time:3 -m hls_list_size:0 -m hls_allow_cache:1 -m hls_segment_filename:mystream-%08d.ts --output-thread -1 --audio-codec aac --audio-samplerate 48000 --audio-bitrate 192 --avqsv-analyze 10 --output-res 1920x1080 --dar 16:9 --vbr 5000 --tff -o mystream.m3u8
のようなオプションを書いてみたのですが、m3u8ファイルが空かロックがかかったまま正常に生成されていかず、代わりにm3u8.tmp というファイルが生成されていきます。
上記オプションはファイルのHLSストリーミングなので、最後までセグメントファイルが生成されると、m3u8.tmpには(何故か途中からの)ファイルリストとエンドマーク(#EXT-X-ENDLIST)が打たれますが、m3u8ファイルにはエンドマークだけが作られます。

一応期待するm3u8ファイルは、リアルタイムにファイルリストが書き込まれていって、ファイルストリーミングなら生成終了時にエンドマークが打たれることです。そうなれば(まだ細かい調整はありますが)期待通りに使えるのではないかと思います。

ちなみに上記オプションで放送リアルタイムストリーミングでは%VIDEOFILE%はUDPの指定、-m hls_list_size:は0ではなく有限の数値に変わりますが、それ以外は同じになります。

以上、もしかしたら見落としているオプションがあるかもしれませんが、宜しくお願いいたします。

Re: hls m3u8のリアルタイム生成

>Vladi様
QSVEncCのhlsの使用で問題があるとのこと、承知しました。

おそらくまだ対応不十分な箇所があるのかと思います。ffmpegの動作がどうなっているのか、再度検証し、そうすればそれと同様の動作となるか、調べてみたいと思います。

ありがとうございました

まだ ドライバや API が対応できていないんですね

お調べ頂き、有難うございました

やはり
どなたの環境でも FFmpeg の VP9 エンコードは恐ろしく遅いんですね…

Google が
エンコード用の CLIバイナリ を
本腰入れて開発してくれればよいのですが (^_^*)

No title

>regnar様
そうですね、もう少し高速化を頑張ってくれるとよいのですが...

>Vladi様
ご指摘いただいた問題点を修正した2.30を公開しました。
http://rigaya34589.blog135.fc2.com/blog-entry-743.html

基本的にはエンコード中もffmpegと同様の動作になっていると思います。まだ不具合や調整が必要な事がありましたら、コメントいただければと思います。
プロフィール

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