So-net無料ブログ作成
検索選択

あんまり進捗がないHandbrakeでのNVENC組み込み [プログラミング]

NVENCのNvEncoderをHandbrakeに組み込めばお気楽に使えるんじゃないかと思って色々やっているんですが、なかなかうまくいかず。まぁそんなもんだよなぁ。でも、先行でQSVが実装されているので、それを利用すれば良い感じ。結構色々流用できそうな様子。というわけで、色々パクって色々コピペで済ませたいw。

EVNECは生のYUVを変換しているのだけれど、Handbrakeは生のYUVファイルは変換できなかった。できたとしたら、もうそのまま突っ込んでMP4コンテナに乗せるだけなんだけどな。とりあえずHandbrake側のYUVの変換部分と、NVENCの擦り合わせはある程度行わないといけないみたい。まぁ大体はYUV420ベースの扱いが多いので、色々何とかなるだろう。

そもそもNvEncoderでh.265に変換できるんだけど、MP4コンテナに載せない生の状態のH.265なので、MP4BOXで変換できるかどうかを調べておきたい。MP4Box -add test hoge.mp4でエラーが出た。

[MPEG-2 TS] TS Packet 968 does not start with sync marker
[Importer] Unknown input file type for "test"

とか出てくるんだけど、返還前のファイルの拡張子を.hevcにリネームしたら問題なくmp4ファイルを出力できた。
MP4Box -h format
でなんとなくつかめた。

基本bitstreamは一般的なものらしい。最悪、MP4Boxからソースを持ってくればストリームからmp4を生成することはできそうだ。まぁQSVと全く同じストリームの形式だとしたらそのままパクれて楽できるんだけど。

とりあえず、NvEncoderをデバッグで発動して、パラメータの中身を確かめておきたい。まぁ大体はソースでわかるんだけど、実際のものを見たほうが確実だし、新しい発見もあるかもしれないからね。

でも、デバッグができない。前はEclipseでステップ実行とか出来たんだけどな。Handbrakeのソースあたりでもできたはずだった。perspectiveにもファイルが出てきているのに、ファイルの行をダブルクリックしてもBraek Pointを張れず(張れているみたいだけど有効じゃない)、コンソールに

No source file named ファイル名


と出てきてしまう。これには大前提を忘れていてg++に-gオプションを入れないといけないらしい。
http://futurismo.biz/archives/1211

NvEncoderのサンプルファイルのMakefileでは
# Debug build flags
ifeq ($(dbg),1)
      CCFLAGS   += -g
      TARGET    := debug
else
      TARGET    := release
endif

とあるので、Eclipseのプロジェクトのプロパティのところの「C/C++ Build」の「Build command」に
make dbg=1

でブレークが張れるようになる。とにかく-gオプションを入れれば、Ecilpseではデバッグできるようになる。というか、そもそもgdbを使うんだから、デバッグ情報を入れなきゃならないのは当然だったのでした。というか、サンプルなんだからデバッグオプションぐらい張っておいても良さそうなもんなのにね。handbrakeの時は自分で-gオプションつけたのかな。まぁ解決したから先に進むだけだ。

コメント(0) 
共通テーマ:パソコン・インターネット

Twitterまとめ投稿 2017/08/04 [Twitter]


コメント(0)