0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenCV videowriter fourccと拡張子で簡易ベンチマーク

Posted at

OpenCV videowriter で作成する動画の中間ファイルがデカすぎる

下記のアプリを作成したのですが、OpenCV videowriterで作成している中間ファイルの動画ファイルが大きく、その後の音声データをつける処理に影響が出ている、と感じていました。

当初は、fourcc mp4vを使っていたのですが、ciscoのopen-h264.dllを利用したmp4の方が(正規っぽくて)ファイルサイズが小さいのでは??と考えたのですが、実際にやってみると違和感を感じました。
実際にどれがファイルサイズが小さく、また中間動画ファイル作成時の負荷が小さそうか、確認した方がいいと思い、簡単ですが調査しました。

fourcc(拡張子)ごとの簡易ベンチマーク

環境

Windows11 64bit
python 3.11
opencv-python 4.10.0.84
intel 11400F
geforce 4700tiSUPER 16GB
MEM 32GB

ベンチマークに用いた動画

大きい動画でも試したのですが、傾向は同じだったので、小さいファイルで確認しています。

拡張子 ファイルサイズ フレームレート(FPS) ビットレート(kbps) 時間(秒)
mp4 47.5MB 60 19756 20 2560 1080

動画はhandbrakeで作成したもので、H.265 NVencで作成したものです。

エントリーしたfourccと拡張子

上記のmp4v、cisco open-h264以外にも、使えるかもしれないかな?と思ったものをエントリーしました。
OpenCVでfourccと拡張子を設定すると、 "そんな組み合わせないから俺(opencv内ffmpeg)が拡張子に合わせてコレに変えといたぜ" と言われることが結構あり、その辺も出ないように言われるがままの組み合わせに変更して設定しています。

OpenCV: FFMPEG: tag 0x5634504d/'MP4V' is not supported with codec id 12 and format 'mp4 / MP4 (MPEG-4 Part 14)'
OpenCV: FFMPEG: fallback to use tag 0x7634706d/'mp4v'
fourcc 拡張子 テスト前の俺下馬評
mp4v .mp4 最初はファイルサイズが大きいと感じたが、実際はどうなんだ??
avc1 .mp4 CISCO openh264-1.8.0-win64.dll 本当にこれがいいのかな?
vp09 .mp4 VP9が選べた。ファイルサイズは強そうだが、果たして?
FMP4 .avi xvidだと思ったけど違う?FMP4?まぁイマドキAVIはないだろうな
XVID .wmv WMVも試してみたかった。XVIDが通った(え?)。果たして?
mp4v .wmv WMVはmp4vでも通った。果たして?
FMP4 .wmv WMVはFMP4でも通った。果たして?

結果

ファイルサイズが小さく、動画処理のフレームレートが速い(数値が大きい)ものが望ましい。
FPSはGPUによる推論を含むなので多少振れは発生するとは思われるが、動画圧縮の負荷

fourcc 拡張子 ファイルサイズ(KB) 動画作成時FPS 備考
mp4v .mp4 100842 17.78
avc1 .mp4 170402 16.45 CISCO openh264-1.8.0-win64.dll利用
vp09 .mp4 中止 1.0程度 あまりに遅かったので中止
FMP4 .avi 100894 17.63
XVID .wmv 101686 17.68
mp4v .wmv 101686 17.83
FMP4 .wmv 101686 18.07

考察

CISCO openh264-1.8.0-win64.dllを利用するのが良いだろうと思い込んでいたが、mp4vと比べるとこちらの方がファイルサイズが大きかった。
vp09は圧縮処理の負荷が大きいのかあまりに遅かったので途中で中止。(その割にはシステムモニターでCPU負荷がMAXではないのだが)
FMP4+.aviは、当初の期待を裏切り好成績。mp4v+.mp4と大きな差はなかった。
wmvは最近見かけないが、もしかしたらダークホース的な位置づけになるか?と期待していた。大きな遜色はないが、積極的に採用するほどではないかな?という印象。ファイルサイズはfourccに何を選んでも同じなのはちょっと不思議(そういうもの?)。
OpenCV内のffmpegがかなり有能で拡張子に適したfourccを選んでくれるので、それに乗っかっておくスタイルが良さそう。
fourcc FMP4は知らなかったが、ラッパー的な振る舞いをするものなのかな?

結論

アプリでの一時の動画書き出しには、mp4v+.mp4か、FMP4+.aviにする予定。aviの方が次の音声付加で有利か?
CISCO openh264-1.8.0-win64.dllの採用はやめておく。
OpenCV videowriterでは、mp4v+.mp4 が王道で間違いない選択だったことを再確認できた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?