x264, x264gui, x264guiEx 32bit,64bit 速度比較

パイプ方式を作ってみた最大の理由は64bitx264を使ってエンコードを少しでも高速化しようってことなんで、その検証をしてみる。

比較するのは
・Avisynth 64bit + x264 64bit
・Avisynth 32bit + x264 32bit
・Avisynth 32bit + avs2yuv 32bit + パイプ + x264 64bit
・Aviutl + x264guiEx + x264r1804 64bit
・Aviutl + x264guiEx + x264r1804 32bit
・Aviutl + 改造版x264gui r1804+350
もちろん、AvisynthもAviutlもフィルタはなし。


予想としては、64bitなら速くなるかなと。

入力データ
解像度 : 1280x720p
fps : 30.000fps
コーデック : UtVideo (ULY0) x86/x64ともにあり
フレーム数 : 3052 frame (約 1分42秒)
音声 : なし
その他 : アニメ絵

AvisynthではAVISourceを使い、pixel_typeにはYV12を指定した。

x264.exe は http://x264.nl/のバイナリを使用
x264のオプション(適当)
--crf 21 --preset slow --qcomp 0.75 -i 4 -I 300 --aq-strength 0 -t 2 --no-fast-pskip --no-dct-decimate

共通
Aviutl0.99i8

今回はいろんな環境で試して、その違いも見てみようかと。

環境1
OS : Win7 64bit
CPU : Xeon W3680 (6C/12T, L3=12MB) @ 4070MHz (Core i系)
RAM : 12GB

環境2
OS : Win7 64bit
CPU : Core2Duo P8600 (2C/2T, L2=3MB) @ 2400MHz
RAM : 4GB

環境3 (64bit系のテストはできない)
OS : WinXP 32bit
CPU : Core2Quad Q6600 (4C/4T, L2=4MB×2) @ 2400MHz
RAM : 2GB

速度比較にはログに最後に表示されるfpsを使う。


x264 speedtest01

これだとよくわからんので、Avisynth32bit + x264 32bit を基準にそろえると、

x264 speedtest02

どこでそろえるかで印象が変わるので、今度はx264guiにそろえたもの。

x264 speedtest03

というか、環境2と3ではAviutlの処理がやけに遅い気がする。逆に環境1はAviutlのほうが速い(ぇ
ちょっと変なぐらい。

このことに注意しながら見ると、

・64bitで高速化。ただし、環境2よりも環境1のほうが64bit化による高速化の割合が高い。Avisynthにそろえたグラフでみるとよくわかり、環境1では約15%、環境2では~10%ぐらい。Core2よりもCoreiのほうが64bit最適化が進んでいるといわれているので、そのせいかもしれない。

・パイプ使用による速度低下はあまり見られない。

・改造版x264guiのバイナリはたぶん遅い…orz(x264guiExでパイプした32bitx264のほうが速いし…だけどたぶんそんなはずはないということはバイナリのせい)

あとは実験環境ではメモリがかなり余ってる状態だけど、パイプ処理はメモリの空きがじり貧だと遅くなりそう。バッファ的に。

まあ64bitで速くなることがわかれば十分。

ただ10~15%高速化ってのは結構大きいものの、体感できるかどうかは微妙かな。

それにこれは全くフィルタをかけてないからいいけど、フィルタのほうで詰まってしまって律速になって、x264の速度はあんまり関係なかったりすることもある。もちろん、その場合でも2つ同時にエンコードする場合とかには高速化も意味があるだろうけど。
スポンサーサイト



コメントの投稿

非公開コメント

No title

64bit版x264をaviutlで使用する…
まさに自分が待ち望んでいたものです。
こちらの環境(PhenomII)でも32→64bitで約15%の速度向上となりました。
ありがとうございます。

Re: No title

やはり、だいたい15%ぐらいなのですね。
AMDのCPUは持っていないので検証できなかったのですが、
AMDのCPUでも高速化されたのなら何よりです。

No title

x64で早くなったことよりも、環境1のスペックに驚いたw

No title

もうすぐ64bitOSに乗り換えようと思うのですがAvisynth 32bit + avs2yuv 32bit + パイプ + x264 64bitのコマンドラインの処理がよくわかりません.出来れば教えていただけないでしょうか.avsからx264でmp4を作るのが目的です,

Re: No title

"-"がパイプの意味です。

avs2yuv.exe "<avsファイル>" -o - | x264.exe - [オプションいろいろ] --demuxer y4m -o "<出力mp4>"

最近はChikuzen様のavs2pipemodというのもあります。
http://csbarn.blogspot.com/2011/07/avs2pipemod-7.html

プログレッシブ / インタレ / SAR などの情報を一緒に指定でき、
音声のパイプ出力も可能です。

プログレッシブなら、
avs2pipemod.exe -y4mp "<avsファイル>" | x264.exe - [オプションいろいろ] --demuxer y4m -o "<出力mp4>"

プログレッシブでSAR比4:3なら、
avs2pipemod.exe -y4mp=4:3 "<avsファイル>" | x264.exe - [オプションいろいろ] --demuxer y4m -o "<出力mp4>"

インタレ保持(tff)なら、
avs2pipemod.exe -y4mt "<avsファイル>" | x264.exe - [オプションいろいろ] --demuxer y4m -o "<出力mp4>"

音声も可能です。
avs2pipemod.exe -wav=16bit "<avsファイル>" | neroaacenc.exe -br 128000 -if - -of "<出力m4a>"

以上のような感じのコマンドラインになります。

No title

rigayaさんありがとうございます.
avs2pipemodならwaviの役割も果たせるので便利そうなのでavs2pipemodを使ってみます.

No title

下らない質問なのですが…
Avsynth(x86)+x264(x64)だけではアウトなのでしょうか?
avs2yuvかavs2pipemodを通さなければいけないのでしょうか?
(実を言うと役割を理解していませんが…)

Re: No title

Avisynth(x86)+x264(x64)では残念ながら無理かと。
同一プロセスに32bitと64bitは同居できないためです。

Avisynth(x86)のフレーム生成と、x264(x64)のエンコードは別プロセスにして、
パイプを使うなり、AvisynthのTCPDeliverを使うなりして
フレームを渡してやる必要があります。

こんなかんじ↓

avs2yuv/avs2ipemod x86
Avisynth x86 フレーム生成 (32bitプロセス)
 ↓
パイプ(フレームを渡す)
 ↓
x264 x64 エンコード (64bit プロセス)

Avisynth(x86)+x264(x86)のように全て32bitとか
Avisynth(x64)+x264(x64)のように全て64bitなら
OKなので、x264からavisynthを直接使えるわけです。

No title

返答ありがとうございます。
avs2yuv/avs2ipemodをなんとか習得してみます(一度クラッシュさせてしまった経験あり)
AviSynthはx86で行きたいので(ITs等勝手がいいので…)なんとかしますです。

No title

>avs2pipemod.exe -wav=16bit "<avsファイル>" | neroaacenc.exe -br 128000 -if - -of "<出力m4a>"
質問です、上記の音声処理に-2passはつかえないのでしょうか?
1pass(指定なし)であれば稼働するのですが、
ERROR: Can't encode two-pass from stdin
と出てしまいます、場違いな気もしましたがお願いします。
容量そろえるための音声2passは結構大きいので…。
※表記の処理も品質音声も稼働しています

No title

基本的に2pass処理にパイプは使用できませんのでavs2wavなどでwavファイルを出力してから、そのwavファイルを2passエンコード…という流れになると思います。

No title

わかりましたm(__)m
※返答遅くなりもうしわけございませんでした
(avs2pipemod.exe -wav "input.avs" > "output.wav"を単体処理した後音声エンコード)
プロフィール

rigaya

Author:rigaya
アニメとか見たり、エンコードしたり。
連絡先: rigaya34589@live.jp
github twitter

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

○Aviutl 出力プラグイン
x264guiEx 3.xx
- x264を使用したH264出力
- x264guiExの導入紹介動画>
- x264guiExの導入
- x264guiExのエラーと対処方法>
- x264.exeはこちら>

x265guiEx
- x265を使用したH.265/HEVC出力
- x265guiExの導入>
- x265.exeはこちら>

QSVEnc + QSVEncC
- QuickSyncVideoによるHWエンコード
- QSVEnc 導入/使用方法>
- QSVEncCオプション一覧>

NVEnc + NVEncC
- NVIDIAのNVEncによるHWエンコード
- NVEnc 導入/使用方法>
- NVEncCオプション一覧>

VCEEnc + VCEEncC
- AMDのVCE/VCNによるHWエンコード
- VCEEnc 導入/使用方法>
- VCEEncCオプション一覧>

svtAV1guiEx
- SVT-AV1によるAV1出力
- svtAV1guiExの導入>
- SVT-AV1単体はこちら>

VVenCguiEx
- VVenCによるVVC出力
- VVenCguiExの導入>

ffmpegOut
- ffmpegを使用した出力
- ffmpegOutの導入>


○Aviutl フィルタプラグイン
自動フィールドシフト (ミラー)
- SSE2~AVX512による高速化版
- オリジナル: aji様

clfilters 
- OpenCLベースの複数のGPUフィルタ集
- 対応フィルタの一覧等はこちら

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

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

PMD_MT
- SSE2~AVX512による高速化版
- オリジナル: スレ48≫989氏

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

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

○その他
Amatsukaze改造版
- AmatsukazeのAV1対応版

rkmppenc
- Rockchip系SoCのhwエンコーダ

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 (ミラー)
SVT-AV1 (ミラー)

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

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

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