QSVencでShadowplayのVFR動画をCFRに変換する

Shadowplayで録画したVFRの動画をそのままYoutubeにアップロードすると音ズレするっぽい?ので、QSVでCFRに再エンコしてから上げる方法メモ。

使用ツールはQSVencのコンソール64bit版QSVencC64.exe。

ShadowplayのVFR動画をCFRに変換する方法をググるとHandbrakeがよく勧められてるみたいだけど、HandbrakeでQSVを使おうとするとFramerateがSame as sourceしか選べないみたいだし、x264だと遅いので。

以下の内容のバッチファイルをQSVencC64.exeと同じフォルダに作って、shell:sendtoにショートカット置いて右クリ送るメニューからエンコできるようにした。

QSVEncC64 --avqsv --avsync forcecfr --fps 60 --quality fastest --audio-copy -i %1 -o "%~dp1%~n1-cfr.mp4"

「--fps 60」は環境による。なくてもいいかも。
「--quality fastest」はbest, higher, high, balanced, fast, faster, fastestからお好みで。ただ正直bestでも劇的に画質良くなるわけじゃないのにクッソ遅くなるのでfastestで常用中。

Core i7 4770K (Haswell)環境で、Shadowplay画質低設定の1080p60fpsの12分くらいの動画をエンコするのに、以下くらいの処理速度だった。
fastest 375fps 120s
fast 260fps 170s
best 120fps 350s

今のところAvidemuxで再エンコなしカットしてからQSVencに突っ込んでるけど、--seekで頭飛ばせるみたいなので音ズレしないようならこっちでもいいかな。

追記:
「--audio-copy」だと音ズレする場合があるようなので、現在は以下のようにしている。

@echo off
set /P frame="先頭フレームカット:%frame%"
if "%frame%"=="" (set arg=) else (set arg=--trim %frame%:0)
QSVEncC64 --avqsv --audio-codec aac --audio-samplerate 48000 --audio-bitrate 256 --gop-len 300 --bframes 2 --avsync forcecfr --fps 60 --la-icq 25 --quality fastest %arg% -i %1 -o "%~dp1%~n1-cfr.mp4"
pause

先頭フレームのカットを指定できるようにし、品質オプションを--la-icqにした。