e-tipsmemo

ごった煮

HandBrakeCLIで動画を大量にエンコードする

監視カメラの録画ファイルは
5分の動画が12個x無限に生成される感じになっている。
監視カメラのONVIF機能、QNAPのSurveillance録画するやつで録画されるが、これをエンコードしたい
(本当はそのままの録画ファイルをpython処理できたらよかったが、なぜかできない)
ffmpegではなぜかエンコードできなかったのでHandBrakeでエンコードする。

実践

#!/bin/bash

FILENAME=./enc_mp4/${1%.*}.mp4
CMD="HandBrakeCLI --input $1 --x264-preset fast -f mp4 -o $FILENAME"
eval $CMD

こういうスクリプトを用意して、実行権限を付けておく。
動画ファイルがあるディレクトリに置く、enc_mp4フォルダを作っておく。
実行時間を簡易的に数えておきたいので、

SECONDS=0; ls *avi | xargs -I{} encode_avi.sh {}; echo $SECONDS

とかやってみる。

途中経過。240fps出ているらしい

HandBrake内部での処理が並列化されている

CPU処理的にはまだ余裕がある?

Encode done!
HandBrake has exited.
387

5分の動画12個をエンコードするのに、6分20秒≒6.3minかかった。

並列化

意味があるかわからないが、とりあえずやってみる

SECONDS=0; ls *avi | xargs -P 4 -I{} ./encode_avi.sh {}; echo $SECONDS

さっきより100%に張り付いている

90fps ~ 80fpsになっている(4並列で)

Encode done!
HandBrake has exited.
271

5分の動画12個をエンコードが4分30秒で終わった。

感想

1日分を処理するのに、24回繰り返すので、
24*6.3min ≒ 150min = 2h30min
24*4.5min ≒ 108min ≒ 1h48min
1時間ぐらい早くおわるのなら、毎日朝5時ぐらいにとかならいいかも?

そもそもONVIFで録画するときに最初からPythonOpenCVで処理可能な形式になっていたら問題ない話なので、QNAPのSurveillance Station(もうない)とかいうのをやめて、フリーのONVIF録画ソフトを探すかもしれない。