x265 ビルド ~ PGO & multilib

以前コメントいただいたように、最近のx265では、1つの実行ファイルに8bit/10bit/12bitを含めることができるようになっていて、わざわざexeファイルを分ける必要はない。(multilibバイナリ)

そこで、x265をmultilibとしてビルドしつつ、懲りずにVisula StudioでPGOビルドした。

…ちょうどはいろいろ便利そうなVisula Studio 2015が出た時期にあれなんだけれど、Visual Studio 2013で記事は書いてしまった。

※追記 2015.07.28
現在LTCGあるいはPGOでビルドすると、12bitの出力がおかしくなる問題があるようです。そのため、記事中から12bitのビルドを削除し、8bit + 10bitのみの記述に変更しました。


ビルドの準備



Visual Studio Community 2013
CMake (Win32 Installer をダウンロード)
Mercurial (MSI installer かInno Setup installerのどちらかを)
yasm
適当なy4mファイル (ffmpegとかで自分で作るか、このあたりから適当に bus_cif.y4mとかで)

ffmpegでy4mを作る場合、
ffmpeg.exe -y -i <ソース動画> -an -pix_fmt yuv420p -f yuv4mpegpipe -frame 240 <出力.y4m>
とかで作れば良いと思う。



1. インストーラに従ってVisual Studio Community 2013をインストール。ダウンロード・インストール方法はこちら

2. インストーラに従ってMericurialをインストール。環境変数を設定してもらうのを忘れないようにする。

x265_mercurial_path.png

3. インストーラに従ってCMakeをインストール。環境変数を設定してもらうのを忘れないようにする。

x265_cmake_path.png

4.ダウンロードしたyasmをパスの通じているところへ配置する。さっきCMakeのbinにパスを通しているので、Cmake\binに放り込んだ。

x265_cmake_bin.png


5. ひとまず、コマンドプロンプトで、
がそれぞれ反応があるか確かめる。

これで準備は完了。



ビルド実行





これで終わり。



効果確認



環境
Win 8.1 x64
Core i7 5960X (8C/16T, L3=20MB)
Core 4.4GHz / Cache 3.8GHz
DDR4-2666, 4ch, 32GB
Aviutl 1.00
lwinput r785
x265guiEx 3.62(仮) (VS2015対応、mutlilib対応版)…週末公開予定

ソース
Charlotte OP を一度x265 + x264guiEx + afsでエンコードしたもの。
1920x1080p 23.976fps 約1分30秒

x265.exe 1.7+357 x64 8bit/10bit
・PGOビルド
・普通のLTCGビルド

x265 オプション
--preset slow --crf 21 --pmode --amp --weightb



結果
LTCGPGO高速化率
8bit4.28 fps4.38 fps+2.3%
10bit2.41 fps2.48 fps+2.9%


8bit / 普通のLTCGビルド (4.28 fps)
x265_1.7+357_8_no_pgo.png

8bit / PGOビルド (4.38 fps)
x265_1.7+357_8_pgo.png

10bit / 普通のLTCGビルド (2.41 fps)
x265_1.7+357_10_no_pgo.png

10bit / PGOビルド (2.48 fps)
x265_1.7+357_10_pgo.png

わずかだが、少し速い。

まあただ、重いところはアセンブラで高速化されているのだろうし、効果は限定的だと思う。


スポンサーサイト



コメントの投稿

非公開コメント

No title

ビルドとは関係ないんですがちょっと質問です。
tsエンコの場合は8bppと16bppのどちらを使えばいいのでしょうか?

Re: No title

これは人それぞれかと思います。

10bitの利点は、
・画質の向上、色の再現性向上
です。

一方、欠点としては、
・HWデコードがサポートされない場合が(今のところ)多い
・エンコードに時間がかかる

でしょうか。あとはご自身で実際にエンコードしてみて判断していただければと思います。

No title

なるほど10bitだと無駄になるというわけではないんですね。

No title

返信ありがとうございました

No title

12bitのbuildが無くなったので、

>cd "..\10bit"
これは

>cd ".\10bit"
若しくは
>cd 10bit

こうじゃないでしょうか。
(ピリオドが一つ多い)

このままだと、10bitディレクトリに移動できずに
エラーになります。

Re: No title

ああ、たしかに…

修正しました。

No title

bat直して、VS 2015で試してみたんですが、stdlib.hに変更が入ったおかげで、今のSourceだとビルドが転けますね。

https://bitbucket.org/multicoreware/x265/issues/162/compile-with-visual-studio-2015-failed

ここにさらっと書かれてますけど、__argc(と上に書かれてませんが、
__arcvも)
stdlib.hにマクロが記載されてて、こいつが原因らしいです。

getopt.hの該当部分の変数名を変えればとりあえずコンパイルは
出来ますが、まぁ、本家の対応待ちって所でしょう。

No title

ちなみに自前2015とrigayaさんの399で同じ物エンコしたら、
4%弱 2015の方が速くなってました。
PGOも改善されてるらしいので、その効果ですかね?微妙な所ですけど。

ただ・・・PGOビルドのプロファイリング用のexeが、分析を詳細するようになった為か、
もの凄ーく時間かかるようになりました(苦笑
これは、私がプロファイル用にFull-HDのファイルぶっ込んでるせいでも有るんですが。

その辺はMSも分かってて、今までのPGOより、処理を軽くして実行する
オプションも用意したみたいです。
(説明にゲームとか書かれてますが、まぁきっと標準のPGOだと
遅くなりすぎて、テスト実行が大変なんでしょうきっと)

No title

やっとVS2015対策パッチが入ったので素のx265でもVS2015でビルド可能になりましたね。

意味があるかはわかりませんが、1.7+418はVS2015でビルドしてみました。ただ12bitも含めるためLTCG/PGOはオフなので…微妙ですね。

いつも使わせていただいております

「ビルドしたものとか」欄にある、x265のダウンロードのリンク先が、過去のver含めた全部入りになっているのですが、よろしければ確認お願い出来ますでしょうか。

No title

あ、それ私もなりました(100MB超えててびっくりした)

もう一度ダウンロードし直すと正常にダウンロードできました

No title

いまは普通ですが・・・

x265 mutilib のビルドについて

こちらの記事を参考に

ビルド実行 > 10bit用のライブラリをビルド の内容を順に実行してゆき

-G "%CMAKE_VS_TYPE%" ..\..\..\source

この行を渡して CMake での 10bit ライブラリビルドが始まるのですが

Found assembler: yasm.exe
-- Looking for strtok_r

ここまで進んだところで

Looking for strtok_r - not found
CMake Error at CMakeLists.txt:621 (LIST):
list sub-command REMOVE_DUPLICATES requires list to be present.

CMake Warning (dev) at CMakeLists.txt:622 (set):
Cannot set "PLATFORM_LIBS": current scope has no parent.
This warning is for project developers. Use -Wno-dev to suppress it.

とエラーが生じ、ビルドが止まってしまいます。
( 何度か試してみたのですが、毎回この箇所で止まります )


x265\build\vc12-x86_64\10bit\CMakeFiles\CMakeError.log には

CheckSymbolExists.c(8): error C2065: 'strtok_r': 定義されていない識別子です。 [cmTC_b45dc.vcxproj]
プロジェクト "cmTC_b45dc.vcxproj" (既定のターゲット) のビルドが終了しました -- 失敗。
ビルドに失敗しました。

と記録されていました。


x265\source/CMakeLists.txt の 621行目 と 622行目 は

621 LIST(REMOVE_DUPLICATES PLATFORM_LIBS)
622 set(PLATFORM_LIBS ${PLATFORM_LIBS} PARENT_SCOPE)

という内容になっています。


〈 ビルド環境 〉
Windows 10 Pro x64 build 10586
Visual Studio Community 2015 Update1
CMake 3.5.0 x86
Yasm 1.3.0 x64
cmd x64 10.0.10586.0


このような事象に対して
有効な方策 あるいは 問題解決につながるかもしれない事例等に
何かしらお心当たりのある方が居らっしゃいましたら
お知らせ頂ければ幸いです。

No title

2-3日前くらいから、x265側に何らかの変更が入ったようで
x265のビルドがcmakeの途中で止まるようになりました
修正待ちかもしれません

!

なるほどー
そういうこともあるんですね。

CMake が対応されるまで待ってみます。

コマンドプロンプトを介してのVSビルドが初めてなので
手順か何かを気づかないところでミスっているのかと
不安になっていたところでした。

どうもありがとうございました。

No title

現在(2016.03.20)、簡易修正パッチが存在するようなので、

hg clone https://bitbucket.org/multicoreware/x265

の後に

hg import -R x265 --no-commit https://patches.videolan.org/patch/12701/raw/

とすれば回避できます。

ありがとうございます

簡易修正パッチでの回避を試してみたいと思います

教えていただいた簡易修正パッチを導入することで

Looking for strtok_r - not found

で始まるエラーを回避してくれるようになり、
10bit ビルドと 8bit ビルド共に完了まで進めることができました。

・・・が、今度は
情報収集用の実行ファイルを作成 (PGInstrument) のための

MSBuild /p:Configuration=Release;WholeProgramOptimization=%LTCG_OPTION% x265.sln

を渡すと

~\Windows Kits\10\Include\10.0.10586.0\um\windows.h(1): fatal error C1083: include ファイルを開けません。 'winapifamily.h':No such file or directory (ソース ファイルをコンパイルしています ・・・\x265\source\encoder\encoder.cpp) [~\x265\build\vc14-x86_64\8bit\encoder\encoder.vcxproj]

プロジェクト "~\x265\build\vc14-x86_64\8bit\encoder\encoder.vcxproj" (既定のターゲット) のビルドが終了しました -- 失敗。

プロジェクト "~\x265\build\vc14-x86_64\8bit\encoder\encoder.vcxproj.metaproj" (既定のターゲット) のビルドが終 了しました -- 失敗。

プロジェクト "~\x265\build\vc14-x86_64\8bit\x265-static.vcxproj.metaproj" (既定のターゲット) のビルドが終了し ました -- 失敗。

プロジェクト "~\x265\build\vc14-x86_64\8bit\cli.vcxproj.metaproj" (既定のターゲット) のビルドが終了しました -- 失敗。

プロジェクト "~\x265\build\vc14-x86_64\8bit\ALL_BUILD.vcxproj.metaproj" (既定のターゲット) のビルドが終了しま した -- 失敗。

プロジェクト "~\x265\build\vc14-x86_64\8bit\x265.sln" (既定のターゲット) のビルドが終了しました -- 失敗。

と表示されて止まってしまいました

※ 「 ~ 」は、そのディレクトリまでのPATHを伏せるために投稿するにあたって置き換えています


~\Windows Kits\10\Include\10.0.10586.0\um\windows.h

この windows.h の1行目には

#include <winapifamily.h>

とあるので

'winapifamily.h':No such file or directory

とエラーが表示されたように
winapifamily.h が見つからないということだと思います


winapifamily.h は

~\Windows Kits\10\Include\10.0.10586.0\shared\winapifamily.h"

に在るので

#include <~\Windows Kits\10\Include\10.0.10586.0\shared\winapifamily.h>

と書き換えようと思ったのですが
windows.h はなぜか上書き保存できず ( 内容を書き換えられない )
ここで手詰まりになってしまいました。
※ 読み取り専用になっている訳でもないのに書き換えできませんでした。


ゴール目前な感じなのですが
この状況から何か打つ手はあったりするでしょうか。

Re: タイトルなし

一応、こちらでは1.9+100はうまくビルドできていますが…。

ちょっとよくわかりませんが、本来Windows.hはあまり書き換えたりする必要はないはずなので、なにか開発環境のパスとか(?)に問題が生じてしまっているのかな、と思ったりします。

ひとまず、1.9+100はx86/x64/x64 pgoが置いてあるので、それを使えばよい気がしますが…。

その後、何が功を奏したのか不明ではあるものの
windows.h に関するエラーが何故か出てこなくなり
multilib の PGO ビルドが完遂するようになりました

みなさん、rigaya さん
相談にのっていただいて、ありがとうございました (^ ^ )

No title

PGOビルドについて質問です。

私はAMDのプロセッサを使ってるのですが、自分のPCでPGOビルドを行うとより高速化する可能性はあるのでしょうか?

Re: No title

多少高速化する可能性はあると思います。ただ、もともとわずかな高速化なので、わたしのビルドと比べて大きく高速化することはないように思います。

No title

返信ありがとうございます。

可能性はあるとのことでビルドしたところ0.07fps前後の変化がみられました。
ビルドツールを用いた自環境でのffmpegビルドはかなりの効果があったのでもしやと思ったんですが・・。

それはそうとスクリプトありがとうございました。
何年か前にffmpegを一文字ずつ手打ちでビルドしたことはあるのですが、それに比べたらあっけないほど簡単でした。
プロフィール

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