x264guiEx 0.04

x264guiEx 0.04です。

x264 r1804,r1820でも大丈夫です。 更新
・GUIの表示・レイアウトを一部変更
今までのままだといろいろと限界だったので整理した。おかしな表示とかあったし。

・--cqmfileにGUIで対応

・GUIの --open-GOPがきちんと反映されていなかった問題を修正

・GUIの --log-level、--slow-firstpassがエンコード時には指定されるのに、GUI設定時は表示されない問題を修正

・afs使用時のtcfile自動消去を追加(mux成功時のみ)

・自動マルチパス + afs時に、「設定ビットレート通りになるよう、強引に補正する」機能を追加
この名前からして怪しい機能は、名の通り実にインチキくさいと思う。ようはafsを使うとdropによってフレームレートが変化するので、タイムコードをmuxするとビットレートも変化してしまう結果、2passで指定した通りのビットレートにならない。そうすると2passの意味がないので、1pass目で取得したdrop数からそれを相殺するようにビットレート計算をしてx264に渡すというもの。

なんか書いてても、言ってる意味が分からなさそうな文章なので、具体例で説明してみる。

たとえば、2000frameエンコードするとして、
自動2passで1000kbpsを指定したとする。
で、afsによって400frame dropしたとすると、タイムコードmux前は 1000kbpsでも、タイムコードmux後の実レートは
1000(kbps)×( (2000 - 400) / 2000 ) = 800(kbps)になってしまい、
あれー?なして? みたいなことになる。

そこで「強引に補正」っていうのは、1pass目の時に400frame dropするとわかったなら、
1000(kbps)×( 2000 / (2000 - 400) ) = 1250(kbps)をx264に指定してやるってこと。

タイムコードmux前が 1250kbpsだと、
タイムコードmux後の実レートは
1250(kbps)×( (2000 - 400) / 2000 ) = 1000(kbps)
このようにするとタイムコードmux後の実レートが 1000kbpsになるようにする。

問題は1pass目と2pass目で違うビットレートを指定して本当にいいのかとか、やっぱインチキだろとか。
まあ、パイプ方式っていうのはこういうところが難しい。

・x264guiExDefault.iniで、デフォルトのコマンドラインで、インターレースに関する指定を、
--no-interlaceのみから、--tff --no-interlace のように変更。
デフォルトはインターレースオフなんだけど、インターレースオンの時に--tffと--bffのどちらがデフォルトなのかを指定する必要があった。そうでないとGUIでtffにもbffにもチェックが入ってない怪しい状態になる。

・今後の設定ファイルの互換性向上を行った。
今後設定ファイルの構造が変化しても、
x264のパラメータの大半は常に復活できるようにした。
音声の設定、パスの設定等は復活しない。
また v0.03とそれ以前 -> v0.04 時は復活しない。あくまでv0.04 -> v0.xx(あれば)の話。

・Aviutlのコピーフレーム指定に対応

・afs不使用時のみ、Aviutlのキーフレーム指定に対応 (--qpfile自動生成、Iフレーム指定)
afs使用時は対応せず。dropがどこで来るかわからない以上、難しい。
Kフレーム指定でなく、Iフレーム指定にしたのは、Aviutlでキーフレームを指定するというのは、そこでファイルを分割したいという意図もあるかもしれないので、open-GOPに関係なく確実に問題なく分割できる(であろう)Iフレーム指定にした。…IDRフレームとかの理解が間違っていたらごめん。

・かげろう氏のコピーフレームやキーフレームについてのご指摘・ご助言に感謝します。


なんかよくmuxに失敗するっていう話なんだけど、うーん。私の環境ではほとんど失敗しないんでなんとも。
muken氏がtc2mp4Modの同梱mp4boxを更新してくださったので、それを使うか、こちら(POP氏)のもいいかもしれない。


ダウンロード>>


スポンサーサイト

コメントの投稿

非公開コメント

No title

更新お疲れ様です!
遂にカスタムマトリクスの指定がGUIで出来るように・・・
これからも頑張ってください!!

No title

お疲れ様です。
色々と取り込んでいただきありがとうございます。
内部がさっぱりわかっていないがために、自分はかなり無駄なことをやっていたようで……お手数をおかけしました。

キーフレーム渡しについては、AFSのドロップフレームがわかるのがいつなのかによっては、「AFS&マルチパスならキーフレーム渡し有効にできるのでは?」なんて思ってみたりもしました。1パス目で、AviUtl側のキーフレーム設定されたフレームと、AFSでドロップするフレームが把握できれば、2パス目が始まる前にドロップのずれを反映した--qpfileを制作できるんじゃないか?、と。
でも、AFSの動作が1パス目と2パス目以降で同じなのか、そもそも出力プラグイン側にAFSからどんな情報が渡されているのか、とか分からないことだらけだったので断念しました。
その前に「AFS+マルチパスだけ対応」ってマイナーすぎて対応できても使われなかったりするのかな?(--crfとかで使えないと意味無いかな?)なんて考えもありましたが。

>問題は1pass目と2pass目で違うビットレートを指定して本当にいいのか

x264のratecontrol.cの555行目の
int x264_ratecontrol_new( x264_t *h )
関数内の672行目、
/* Load stat file and init 2pass algo */
から先の
x264_log(h, X264_LOG_ERROR, ~
を流し読みした限りでは問題ない……のかもしれません(?)

No title

お疲れ様です。使ってみて気付いた点ですが

・x264側のetaが表示されない
パイプだと総フレーム数が分からないためですが、afs不使用時なら--framesで総フレーム数を渡すことで解決できます。

・量子化マトリクスのファイル指定ダイアログを開いて、何も指定せずキャンセルすると量子化マトリクスの設定が空白になる

以上2点が気になりました。

No title

>かげろう様
いえいえ、いろいろありがとうございます。

AFS&マルチパスにはちょっと問題があると思われるのです。
afsでどこがドロップするかはいつも一緒なんで2pass目からは、何処のフレームをキーフレームにすればいいかを求めることはできるのですが、1pass目で決定されたフレームの種類を変えて、「ここをキーフレームにしてくれ!」って言うのは結構まずいんじゃないかと。ステータスファイルにファイルの種類が書き込まれていて、それを基本として2pass目はやっていると理解しています。…たぶん。
それとも大丈夫なのかな…?


>砂糖煮様
た…たしかに。
改善します!

No title

iniのプリセットで「--level 3.0」の指定がうまくいかないのは
他の設定の影響なのでしょうか?
(--level 4.1なら反映される)

No title

ごめんなさい、自己解決しました。

No title

そういえばPSP(main profile)のプリセットにもレベル指定あるけど
選択してもGUIの項目に反映されていない気がしてたりしますね。

No title

--level 1.0, 2.0, 3.0, 4.0, 5.0が反映されない…

修正します。

No title

あと考えられるのは……キーフレーム指定がある場合に限り、
afs_get_video(oip, i_frame, &drop, &next_jitter)
でカラ出力させてドロップフレームだけを取得するとか(ぇ
それなら--cfrでも--qpでも1パスでもいけるはず(AviUtl側でフィルタかけまくってたら重そう・・・?)

//全フレームにわたって、AviutlからフレームのフラグとAFSのドロップフレームを取得
for (i_frame = 0; i_frame < oip->n; ++i_frame) {
aviutl_frame_flag = oip->func_get_flag(i_frame);
if (aviutl_frame_flag & OUTPUT_INFO_FRAME_FLAG_KEYFRAME) {

if (prm->p.b_afs) {
※afs_get_video(oip, i_frame, &drop, &next_jitter)を使って?ドロップフレーム取得のためごにょごにょ
}

fprintf(qpfile, "%d I\r\n", i_frame-総ドロップフレーム数?);

}
}
if (i_keyframe_first_appearance > 0)
fclose(qpfile);

・・・「AFSでキーフレーム指定してる人なんて多分いないから対応しなくても問題ない!(本当?)」とか投げやりな気分になりつつありますが実際どうなんでしょうかね。


さて本題です。非AFSで0frame目にAviUtlのコピーフレームが指定されているとおかしな画(謎メモリ空間?)がx264に渡されてました。自分のソースではその場合コピーフレーム指定を無視していたつもりです。

Re: No title

カラ出力…たしかに最後の切り札ですが、そこまでやるなら可逆圧縮などで中間ファイル出力したほうがいいかと思います。(詳しくないですが。)

>AFSでキーフレーム指定してる人なんて多分いないから対応しなくても問題ない!
そういうことにします。
まあ、指定したフレームがドロップすることだって考えられなくはないですし。

>0frame目にAviUtlのコピーフレーム
ごめんなさい、盲点だった…
無視するようにします。
ただ、最初のフレームをコピーフレームにするというのはもはや何を「コピー」したいのかわからないですし、コピーフレームの使い方としておかしい気もしますけど。
プロフィール

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