x265ビルド VC2017版

なんか要望があったのでVC2017でのビルド方法。とはいっても、ほとんど何も変わらないのだが…。

以下のスクリプトで8bit/10bit multilibのx265をPGOビルドできる。

準備



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

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

とりあえず、上記をすべてインストールする。cmake/hg/nasmにはパスを通しておき、コマンドプロンプトで


cmake
hg
nasm


が反応あるかどうかを確認する。



ビルド実行





md <x265をビルドするフォルダ>
cd /d <x265をビルドするフォルダ>

set TEST_MOVIE=<y4mファイルへのパス>

rem x265のソースをダウンロード
hg clone https://bitbucket.org/multicoreware/x265

rem PGOを有効
set LTCG_OPTION=PGInstrument
rem 無効にする場合はこちら
rem set LTCG_OPTION=true

rem ここではx64ビルド
md x265\build\vc15-x86_64
cd x265\build\vc15-x86_64
set CMAKE_VS_TYPE=Visual Studio 15 2017 Win64
set ARCH_VC=x64

rem x86ビルド用
rem md x265\build\vc15-x86
rem cd x265\build\vc15-x86
rem set CMAKE_VS_TYPE=Visual Studio 15 2017
rem set ARCH_VC=Win32

rem コンパイルオプション
rem PGOビルドには、/GLが必要
rem その他のオプションは適当 (必要ないかもしれない)
set VC_OPTIONS=/GL /MP /MT /Ox /Ob2 /Oi /Ot /Oy /GT /GF /Gy /fp:fast /D NDEBUG

rem PGOは/LTCG (リンク時コード生成) の一種なので
rem /INCREMENTAL:NOとしないとリンク中に警告が表示される
rem /LARGEADDRESSAWAREはx86ビルド用 (x64では単に無視される)
set VC_LINKER_EXE_OPTIONS=/INCREMENTAL:NO /LARGEADDRESSAWARE /OPT:REF /OPT:ICF
set VC_LINKER_MODULE_OPTIONS=/INCREMENTAL:NO
set VC_LINKER_SHARED_OPTIONS=/INCREMENTAL:NO

rem VC2017の環境設定を呼ぶ
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"
call "%VS150COMNTOOLS%\..\..\VC\Auxiliary\Build\vcvarsall.bat" %ARCH_VC%

mkdir 10bit
mkdir 8bit

rem 10bit用のライブラリをビルド
cd "10bit"
cmake -D STATIC_LINK_CRT:BOOL=ON ^
-D ENABLE_SHARED:BOOL=OFF ^
-D CMAKE_CXX_FLAGS_RELEASE:STRING="%VC_OPTIONS%" ^
-D CMAKE_C_FLAGS_RELEASE:STRING="%VC_OPTIONS%" ^
-D CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING="%VC_LINKER_EXE_OPTIONS%" ^
-D CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING="%VC_LINKER_MODULE_OPTIONS%" ^
-D HIGH_BIT_DEPTH:BOOL=ON ^
-D EXPORT_C_API:BOOL=OFF ^
-D ENABLE_CLI:BOOL=OFF ^
-G "%CMAKE_VS_TYPE%" ..\..\..\source

pause

MSBuild /property:Configuration="Release";WholeProgramOptimization=%LTCG_OPTION% x265.sln
copy /y Release\x265-static.lib ..\8bit\x265-static-main10.lib

rem 8bit用のライブラリをビルド
cd "..\8bit"
cmake -D STATIC_LINK_CRT:BOOL=ON ^
-D ENABLE_SHARED:BOOL=OFF ^
-D CMAKE_CXX_FLAGS_RELEASE:STRING="%VC_OPTIONS%" ^
-D CMAKE_C_FLAGS_RELEASE:STRING="%VC_OPTIONS%" ^
-D CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING="%VC_LINKER_EXE_OPTIONS%" ^
-D CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING="%VC_LINKER_MODULE_OPTIONS%" ^
-D EXTRA_LIB:STRING="x265-static-main10.lib" ^
-D LINKED_10BIT:BOOL=ON ^
-G "%CMAKE_VS_TYPE%" ..\..\..\source

rem 情報収集用の実行ファイルを作成 (PGInstrument)
MSBuild /p:Configuration=Release;WholeProgramOptimization=%LTCG_OPTION% x265.sln

rem PGOビルドをしない場合はこれで終了
if "%LTCG_OPTION%" == "true" goto FINISH

rem 情報収集用にx265を実行(8bit)
release\x265.exe --crf 23 --preset medium -o nul "%TEST_MOVIE%"
release\x265.exe --crf 23 --preset slow --amp --weightb -o nul "%TEST_MOVIE%"

rem 情報収集用にx265を実行(10bit)
release\x265.exe --crf 23 --input-depth 8 --output-depth 10 --preset medium -o nul "%TEST_MOVIE%"
release\x265.exe --crf 23 --input-depth 8 --output-depth 10 --preset slow --amp --weightb -o nul "%TEST_MOVIE%"

rem 作成されたプロファイルをもとに
rem 最適化された実行ファイルを作成 (PGOptimize)
MSBuild /p:Configuration=Release;WholeProgramOptimization=PGOptimize x265.sln

:FINISH
rem これで終了
rem 8bit\release\x265.exeが最適化された実行ファイル


これで終わり。
スポンサーサイト

コメントの投稿

非公開コメント

No title

いつも使わせてもらってます。
vs2015からvs2017環境に更新したので、ビルドバッチもこちらのものを使わせてもらったんですが、

情報収集用にx265を実行(8bit)
情報収集用にx265を実行(10bit)

の部分で
x265 [error]: unable to open input file < C:\x265build\TEST_MOVIE.y4m>
となってしまい最適化されてないビルドのまま出来上がります

Visual Studio Community 2017
cmake ver 3.9.2
Yasm 1.3.0-win64
y4mファイルは 上に書いてる通りにbus_cif.y4m を TEST_MOVIE.y4mとリネームしてます

--input-res 352x288 --fps 30 と指定もしてみましたが効果ありませんでした

何かわかりましたらご教示ください
お願いします

ビルドのログがこちらです
ttps://www.dotup.org/uploda/www.dotup.org1365362.txt

Re: No title

ログを拝見させていただきましたが、最初あたりの
set TEST_MOVIE= C:\x265build\TEST_MOVIE.y4m
の箇所で
set TEST_MOVIE=
のあとに「半角空白」が入っているのが原因かもしれませんので、
set TEST_MOVIE=C:\x265build\TEST_MOVIE.y4m
としてみてください。

あとから"%TEST_MOVIE%"としてコマンドラインでわたすようにしているので…。

No title

お早い返答ありがとうございます

まさにおっしゃる通りでした
半角部分を消したらすんなりといきました
普段使ってるエンコード用のバッチファイルでは半角空けても動作して、問題なかったので完全に盲点でした…
わざわざありがとうございました!

noasm

x265 2.6+8(昨日の分と今朝差し替えられたものの両方)を使ってみたのですが、
--versionを見ると[noasm]となっており、速度が出ないようです。
Doom9を見るとyasmからnasmに切り替わったようなことが
書かれているので、その影響でしょうか?

x265 [info]: HEVC encoder version 2.6+8-fc0570b8d8f9
x265 [info]: build info [Windows][MSVC 1911][64 bit][noasm] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: none!

No title

ああ、パスを通し忘れてました…。

修正しました。

No title

ご対応ありがとうございました。

No title

(ここでいいのかな?)
x265guiEX(3.80)を利用させていただいています。
昨日あたりに、X265(x64)の更新が通知されましたので実行したところ、「x265_2.6+12_x64_2.6+13.exe」という何だか妙な実行ファイルが作成されました。(実行したところ、x265_2.6+12でした)
おや?と思いまして、Onedriveのx265最新アーカイブも確認しましたところ、"current version is 2.6+13.txt"が置かれておりますが、x265_latest_x64.zipにアーカイブされているものがx265_2.6+12.exeとなっておりました。
+13は幻のバージョンだったのか!ということで、既存の+12へ差し戻して利用を続けておりますが、もし+13が実在するようでしたらぜひ差し替えをお願い致したく、コメントをさせて頂きます。

Re: No title

どうも更新の途中の中途半端な状態になってしまったようです。

x265 2.6+14に更新しました。

No title

x265GUIにてx265 2.6+14(x64)に更新されることを確認しました。
ご多忙の中即時対応頂きありがとうございました!
+13は本当に幻になった…

No title

素敵なバッチをありがとうございます。
こちらのバッチを切っ掛けに自ビルドに興味を持ってあれこれと試行錯誤しつつ他の開発環境との違いなんかを比較して楽しませて貰ってます。
さて本題ですが、既にご存知かとは思いますがアセンブラがいつの間にかyasmからnasmに変更されておりました。
さすがにこちらのバッチでビルドしようという方が気付かない事も無いとは思いますが、アセンブラが無ければパフォーマンスに劇的な違いがあるので参考までに。

Re: No title

ああ、一度わたしもnasmを用意するだけ用意して、パスを通し忘れて激遅になりました…。

No title

記事についてもnasm使用に更新しました。

No title

便利に使わせて頂いてますありがとうございます。
x265GUIEXのモジュール更新で、x265_2.7+17(x64)がありましたので適用しましたところ、エンコード後のmux(muxer_r1459)の実行が無応答となり、エンコードが正常に終了しなくなりました。
(muxerのログが表示されず処理が進まない状態)
利用するエンコーダーを1つ前のx265_2.7+14(x64)へ戻すと正常にmuxできます。
ご多忙のところ恐縮ですが、原因の調査をお願いできますでしょうか。

No title

そういうのは最低でもログを出さないと条件が絞り込めなくて
rigayaさんに無駄な時間をとらせてしまうと思う。
うちで適当にエンコしただけだと再現しないし。

No title

こちらでもざっと10bit含めて数パターン試してみましたが、特に問題ないようでした。

オプション次第で発生する/しないが変わったりするのかもしれません。

いずれにせよ、x265の変更により生じていることと思いますので、x265の更新を待つよりほかないと思います。

No title

失礼しました。x265の更新前後でエンコーダーオプションの変更はしていなかったので省略してしまいました。
何かの参考になるかと思い、状況を補記します。
当面は1つ前のエンコーダーを使用するようにします。
他に何か情報が必要でしたらお教えください。

GUIEX(3.85を使用)に表示されているオプションは以下です。
--no-slow-firstpass --bitrate 4800 --pass 3 --stats "%{savfile}.stats" --no-open-gop --me umh --subme 7 --merange 48 --colormatrix auto --colorprim auto --transfer auto --sar 1:1 --videoformat ntsc

長くてすみません。ログウィンドウに表示されている内容が以下です。
------------------------------------------------------------------------------------------------------------------------------
[D:\20180325_001.mp4] (1 / 2 pass)
------------------------------------------------------------------------------------------------------------------------------
auo [info]: x265guiEx 3.85 / Windows 7 x64 (7601) / Intel Core i7-6950X @ 3.00GHz (10C/20T)
auo [info]: 一時フォルダ : R:\Temp
auo [info]: FAWCheck : FAW, full size
auo [info]: converting YUY2 -> i420p, using AVX AVX2
auo [info]: x265 options...
--input-csp i420 --no-slow-firstpass --bitrate 4800 --pass 1 --stats "D:\20180325_001.stats" --no-open-gop --me umh --subme 7 --merange 48 --colormatrix
bt709 --colorprim bt709 --transfer bt709 --sar 1:1 --videoformat ntsc --input-res 1920x1080 --fps 30000/1001 -o
"R:\Temp\20180325_001.265" "-"
yuv [info]: 1920x1080 fps 30000/1001 i420p8 sar 1:1 unknown frame count
raw [info]: output file: R:\Temp\20180325_001.265
x265 [info]: HEVC encoder version 2.7+17-2e370d98c806
x265 [info]: build info [Windows][MSVC 1913][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x265 [info]: Main profile, Level-4 (Main tier)
x265 [info]: Thread pool created using 20 threads
x265 [info]: Slices : 1
x265 [info]: frame threads / pool features : 4 / wpp(17 rows)
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge : dia / 48 / 2 / 1
x265 [info]: Keyframe min / max / scenecut / bias: 25 / 250 / 40 / 5.00
x265 [info]: Lookahead / bframes / badapt : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb : 1 / 1 / 0
x265 [info]: References / ref-limit cu / depth : 1 / on / on
x265 [info]: AQ: mode / str / qg-size / cu-tree : 1 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress : ABR-4800 kbps / 0.60
x265 [info]: tools: rd=2 psy-rd=2.00 early-skip rskip signhide tmvp fast-intra
x265 [info]: tools: strong-intra-smoothing lslices=6 deblock sao stats-write
x265 [info]: frame I: 416, Avg QP:16.38 kb/s: 21083.15
x265 [info]: frame P: 9947, Avg QP:17.67 kb/s: 8957.91
x265 [info]: frame B: 27463, Avg QP:20.66 kb/s: 3135.10
x265 [info]: Weighted P-Frames: Y:6.9% UV:4.1%
x265 [info]: consecutive B-frames: 13.0% 8.8% 18.9% 18.9% 40.4%

encoded 37826 frames in 1188.68s (31.82 fps), 4863.70 kb/s, Avg QP:19.83
auo [info]: drop 7126 / 44952 frames
auo [info]: CPU使用率: Aviutl: 12.97% / x265: 39.78%
auo [info]: x265エンコード時間 : 0時間19分48.6秒


------------------------------------------------------------------------------------------------------------------------------
[D:\20180325_001.mp4] (2 / 2 pass)
------------------------------------------------------------------------------------------------------------------------------
auo [info]: x265guiEx 3.85 / Windows 7 x64 (7601) / Intel Core i7-6950X @ 3.00GHz [TB: 3.20GHz] (10C/20T)
auo [info]: converting YUY2 -> i420p, using AVX AVX2
auo [info]: x265 options...
--input-csp i420 --no-slow-firstpass --bitrate 4800 --pass 3 --stats "D:\20180325_001.stats" --no-open-gop --me umh --subme 7 --merange 48 --colormatrix
bt709 --colorprim bt709 --transfer bt709 --sar 1:1 --videoformat ntsc --frames 37826 --input-res 1920x1080 --fps 30000/1001
-o "R:\Temp\20180325_001.265" "-"
yuv [info]: 1920x1080 fps 30000/1001 i420p8 sar 1:1 unknown frame count
raw [info]: output file: R:\Temp\20180325_001.265
x265 [info]: HEVC encoder version 2.7+17-2e370d98c806
x265 [info]: build info [Windows][MSVC 1913][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x265 [info]: Main profile, Level-4 (Main tier)
x265 [info]: Thread pool created using 20 threads
x265 [info]: Slices : 1
x265 [info]: frame threads / pool features : 4 / wpp(17 rows)
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge : umh / 48 / 7 / 2
x265 [info]: Keyframe min / max / scenecut / bias: 25 / 250 / 40 / 5.00
x265 [info]: Lookahead / bframes / badapt : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb : 1 / 1 / 0
x265 [info]: References / ref-limit cu / depth : 3 / on / on
x265 [info]: AQ: mode / str / qg-size / cu-tree : 1 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress : ABR-4800 kbps / 0.60
x265 [info]: tools: rd=3 psy-rd=2.00 rskip signhide tmvp strong-intra-smoothing
x265 [info]: tools: lslices=6 deblock sao stats-write stats-read
x265 [info]: frame I: 416, Avg QP:15.26 kb/s: 20066.85
x265 [info]: frame P: 9947, Avg QP:17.78 kb/s: 8135.07
x265 [info]: frame B: 27463, Avg QP:21.74 kb/s: 3368.28
x265 [info]: Weighted P-Frames: Y:6.8% UV:4.0%
x265 [info]: consecutive B-frames: 13.0% 8.8% 18.9% 18.9% 40.4%

encoded 37826 frames in 2638.08s (14.34 fps), 4805.44 kb/s, Avg QP:20.63
auo [info]: drop 7126 / 44952 frames
auo [info]: CPU使用率: Aviutl: 6.13% / x265: 54.77%
auo [info]: x265エンコード時間 : 0時間43分58.9秒
auo [info]: faw2aac で音声エンコードを行います。
auo [info]: L-SMASH muxer (r1459) でmuxを行います。映像: on, 音声:off, tc:off, chap:off, 拡張モード:なし
auo [info]: ".\exe_files\muxer_r1459.exe" --file-format m4v -i "R:\Temp\20180325_001.265"?fps=30000/1001 --optimize-pd -o "R:\Temp\20180325_001_muxout.mp4"

※通常だとログに「L-SMASH muxer」…が出力されてmuxが進みますが、現在出力されているのは上記までです
 (プロセスとしては、muxer_r1459.exeは起動されています)
※別端末でも同じ事象が発生(AVIUTLの構成は全く同じ)
※テンポラリには、.265と.aacファイルが出力されていて、音声と映像が同じパスにあるため、プレイヤーで正しく再生可能です(mpc-BE)

muxer.exeのフリーズ/クラッシュ

上で報告されている、
 「x265 2.7+17でL-SMASHのmuxer.exeがフリーズ(orクラッシュ)する」
という問題が再現したので、Doom9とGitHubで報告しました。
x265 2.7+17の問題なのか、L-SMASH側の問題なのかは、まだわかりません。
私は解析まではできないので反応待ちです・・・。

https://forum.doom9.org/showthread.php?p=1837506#post1837506
https://github.com/l-smash/l-smash/issues/82
http://mevius.5ch.net/test/read.cgi/avi/1511263100/104-

Re: muxer.exeのフリーズ/クラッシュ

本件の修正版とみられる更新がありましたので、ビルドしました。
x265 2.7+20
L-SMASH r1470

無事、修正されているようです。報告ありがとうございました。

No title

(x265のスレで話題になってて少し驚きました。報告入れてくれた方感謝です!)
ビルドありがとうございます。x265GUIEXで、
>x265 2.7+20
>L-SMASH r1470
へ更新を行ったところ、muxが正しく実行されるようになりました。
プロフィール

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