以前コメントいただいたように、最近の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をインストール。環境変数を設定してもらうのを忘れないようにする。
3. インストーラに従ってCMakeをインストール。環境変数を設定してもらうのを忘れないようにする。
4.ダウンロードしたyasmをパスの通じているところへ配置する。さっきCMakeのbinにパスを通しているので、Cmake\binに放り込んだ。
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
結果 LTCG PGO 高速化率 8bit 4.28 fps 4.38 fps +2.3% 10bit 2.41 fps 2.48 fps +2.9%
8bit /
普通のLTCGビルド (4.28 fps)
8bit /
PGOビルド (4.38 fps)
10bit /
普通のLTCGビルド (2.41 fps)
10bit /
PGOビルド (2.48 fps)
わずかだが、少し速い。
まあただ、重いところはアセンブラで高速化されているのだろうし、効果は限定的だと思う。
スポンサーサイト
ビルドとは関係ないんですがちょっと質問です。
tsエンコの場合は8bppと16bppのどちらを使えばいいのでしょうか?
これは人それぞれかと思います。
10bitの利点は、
・画質の向上、色の再現性向上
です。
一方、欠点としては、
・HWデコードがサポートされない場合が(今のところ)多い
・エンコードに時間がかかる
でしょうか。あとはご自身で実際にエンコードしてみて判断していただければと思います。
なるほど10bitだと無駄になるというわけではないんですね。
返信ありがとうございました
12bitのbuildが無くなったので、
>cd "..\10bit"
これは
>cd ".\10bit"
若しくは
>cd 10bit
こうじゃないでしょうか。
(ピリオドが一つ多い)
このままだと、10bitディレクトリに移動できずに
エラーになります。
ああ、たしかに…
修正しました。
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の該当部分の変数名を変えればとりあえずコンパイルは
出来ますが、まぁ、本家の対応待ちって所でしょう。
ちなみに自前2015とrigayaさんの399で同じ物エンコしたら、
4%弱 2015の方が速くなってました。
PGOも改善されてるらしいので、その効果ですかね?微妙な所ですけど。
ただ・・・PGOビルドのプロファイリング用のexeが、分析を詳細するようになった為か、
もの凄ーく時間かかるようになりました(苦笑
これは、私がプロファイル用にFull-HDのファイルぶっ込んでるせいでも有るんですが。
その辺はMSも分かってて、今までのPGOより、処理を軽くして実行する
オプションも用意したみたいです。
(説明にゲームとか書かれてますが、まぁきっと標準のPGOだと
遅くなりすぎて、テスト実行が大変なんでしょうきっと)
やっとVS2015対策パッチが入ったので素のx265でもVS2015でビルド可能になりましたね。
意味があるかはわかりませんが、1.7+418はVS2015でビルドしてみました。ただ12bitも含めるためLTCG/PGOはオフなので…微妙ですね。
「ビルドしたものとか」欄にある、x265のダウンロードのリンク先が、過去のver含めた全部入りになっているのですが、よろしければ確認お願い出来ますでしょうか。
あ、それ私もなりました(100MB超えててびっくりした)
もう一度ダウンロードし直すと正常にダウンロードできました
いまは普通ですが・・・
こちらの記事を参考に
ビルド実行 > 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
このような事象に対して
有効な方策 あるいは 問題解決につながるかもしれない事例等に
何かしらお心当たりのある方が居らっしゃいましたら
お知らせ頂ければ幸いです。
2-3日前くらいから、x265側に何らかの変更が入ったようで
x265のビルドがcmakeの途中で止まるようになりました
修正待ちかもしれません
なるほどー
そういうこともあるんですね。
CMake が対応されるまで待ってみます。
コマンドプロンプトを介してのVSビルドが初めてなので
手順か何かを気づかないところでミスっているのかと
不安になっていたところでした。
どうもありがとうございました。
現在(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 はなぜか上書き保存できず ( 内容を書き換えられない )
ここで手詰まりになってしまいました。
※ 読み取り専用になっている訳でもないのに書き換えできませんでした。
ゴール目前な感じなのですが
この状況から何か打つ手はあったりするでしょうか。
一応、こちらでは1.9+100はうまくビルドできていますが…。
ちょっとよくわかりませんが、本来Windows.hはあまり書き換えたりする必要はないはずなので、なにか開発環境のパスとか(?)に問題が生じてしまっているのかな、と思ったりします。
ひとまず、1.9+100はx86/x64/x64 pgoが置いてあるので、それを使えばよい気がしますが…。
その後、何が功を奏したのか不明ではあるものの
windows.h に関するエラーが何故か出てこなくなり
multilib の PGO ビルドが完遂するようになりました
みなさん、rigaya さん
相談にのっていただいて、ありがとうございました (^ ^ )
PGOビルドについて質問です。
私はAMDのプロセッサを使ってるのですが、自分のPCでPGOビルドを行うとより高速化する可能性はあるのでしょうか?
多少高速化する可能性はあると思います。ただ、もともとわずかな高速化なので、わたしのビルドと比べて大きく高速化することはないように思います。
返信ありがとうございます。
可能性はあるとのことでビルドしたところ0.07fps前後の変化がみられました。
ビルドツールを用いた自環境でのffmpegビルドはかなりの効果があったのでもしやと思ったんですが・・。
それはそうとスクリプトありがとうございました。
何年か前にffmpegを一文字ずつ手打ちでビルドしたことはあるのですが、それに比べたらあっけないほど簡単でした。