ATEM mini Extream ISOで各カメラの一括録画をするんですが、1.5時間程度で50GBくらいのファイルサイズになるので、1.5時間ライブで4カメラだと、200GBのファイルサイズになります。
クライアントにデータ納品するには大きすぎる場合があるので、ファイルサイズを縮小したいことが良くあります。
なので、ffmpegを使って一括コンバートをするシェルスクリプトを作りました。
1.5時間程度でファイル分割されるので、01と02を結合する処理を入れましたが、結合したときにプツッとノイズが乗ってしまうことが分かってます。ご利用にはご注意下さい。
CRFは、18としていますが、小さいほどクオリティが高く、6小さくするとファイルサイズが2倍に増えるそうです。逆に6小さくするとファイルサイズが半分程度になります。18にするとで約25%程度のサイズに縮小されます。希望のクオリティに調整して実行してください。
コーデックはlibx264を指定しています。libx265を指定するとエンコードは遅くなりますがファイルサイズは小さくなります。
#!/bin/sh
TEXT="<録画名に書き換えます>"
CRF=18
# Cordec : libx265 / libx264
CODEC=libx264
for i in `seq 1 8`; do
echo "######################################################";
filelist="$TEXT-CAM-$i-01-crf$CRF.txt";
file2all="$TEXT-CAM-$i-all-crf$CRF.mp4";
echo > $filelist;
# 01
file11="$TEXT CAM $i 01.mp4";
file21="$TEXT-CAM-$i-01-crf$CRF.mp4";
echo " $file11 $file21";
echo "file $file21" >> $filelist;
date
ffmpeg -i "$file11" -c:v $CODEC -crf $CRF "$file21";
date;
# 02
file12="$TEXT CAM $i 02.mp4";
file22="$TEXT-CAM-$i-02-crf$CRF.mp4";
echo "###### $file12 $file22";
echo "file $file22" >> $filelist;
date
ffmpeg -i "$file12" -c:v $CODEC -crf $CRF "$file22";
date;
# 結合
ffmpeg -f concat -i "$filelist" -c copy $file2all;
done
PGOUTの動画が複数に分割されたときのffmpegで結合手順
# ファイル名の空白をハイフンへ変換
mv -v "20221106-live-pm 01.mp4" "20221106-live-pm-01.mp4"
mv -v "20221106-live-pm 02.mp4" "20221106-live-pm-02.mp4"
# ファイル名のテキストに書き込む
echo 20221106-live-pm-01.mp4 > filelist.txt
echo 20221106-live-pm-02.mp4 >> filelist.txt
# 結合
ffmpeg -f concat -i filelist.txt -c copy 20221106-live-pm-all.mp4
# ファイル名を元に戻す
mv -v "20221106-live-pm-01.mp4" "20221106-live-pm 01.mp4"
mv -v "20221106-live-pm-02.mp4" "20221106-live-pm 02.mp4"