【中級Linux】動画にAI効果を入れるテクニックと並列処理①【Imagemagick】
はじめに
動画ファイルにAI効果・フィルタを入れる場合、通常は対応している動画ソフトウェアやComfyUI等のフレームワークを利用する必要があります。
つまり、それらに対応していないAI処理の場合は、動画のAI効果として利用できません。
この記事では、画像1枚に対してAI処理を行えるコマンドの仕組みがある場合に、動画にも応用できるやり方を紹介します。
環境
Linuxを利用します。WSLでも可能です。利用するコマンドは以下になります。
bashシェル
Linuxのデフォルトシェルです
ffmpeg
sudo apt install ffmpeg
有名な動画変換フリーソフトHandbrakeにも利用されている変換エンジンです。ここでは動画を各フレーム画像に変換する処理に利用します。変換後のフレーム画像を動画に戻す処理にも利用します。
convert or magick(Imagemagick)
sudo apt install imagemagick
画像処理をコマンドラインで実行できます
parallel(並列化コマンド)
sudo apt install parallel
コマンドを並列実行します
適用したいAIコマンド
GFPGANやrembg等が利用できる環境が必要です
GFPGANやrembgの導入は下記事で紹介しています。Windowsの記事ですが同じコマンドです。
並列処理の仕組みはカーネルとしてのLinuxやwslが必要です。つまりプロセス管理の仕組みが異なるWindowsのbash(cygwinやgitbash)では実現できません。
動画にGPFGANを適用
例として、短い動画にGFPGANを適用します。ただし、100%適用すると効果が強くなりすぎるので、50%(画像の平均)にします。
ffmpegコマンドを利用して動画すべてのフレームを書き出す
ffmpeg -i input.mp4 mov/%04d.png
GFPGANを適用する
GFPGAN(Generative Facial Prior GAN)とは、AI技術で画像の顔部分を修復するためのモデルです。特に低解像度や劣化した顔画像を高品質に復元する事ができます。
※ 動画ファイルが「~/app/work/mov」にあるとします。コマンドが長いので、ファイルにまとめるか、ラッパーコマンドにする方が良いです。
GFPGANリポジトリに用意されているinference例のコマンド(inference_gfpgan.py)をそのまま利用します。フォルダを指定できるので、フォルダ内の画像ファイル全てを処理し、指定フォルダへ出力します。
# Anaconda gfpgan仮想環境に入る
. ~/anaconda3/etc/profile.d/conda.sh
conda activate gfpgan
cd ~/app/gfpgan/GFPGAN
# GFPGAN実行
python ~/app/gfpgan/GFPGAN/inference_gfpgan.py -i ~/app/work/mov \
-o ~/app/work/results-gfpgan \
-v 1.4 \
-s 2 \
--ext png
convertコマンドで画像平均をとる
imagemagickのコマンドですが、画像平均をとる場合は、下記コマンドで実現できます。
convert -average img1.png img2.png out.png
ただし、同じサイズである必要があるため、先にリサイズ機能も利用します。
convert -resize 512 img.png out.png
これらの処理をまとめると、次のシェルスクリプトになります。
#!/bin/bash
set -eu
#作業ディレクトリに移動
cd ~/app/work
#出力フォルダを作成
out_dir=mov_out
if [ ! -e $out_dir ]; then
mkdir $out_dir
fi
#movフォルダの画像一枚ごとに処理
folder1=mov #元動画
folder2=results-gfpgan/restored_imgs #AI処理動画
for file in ${folder1}/*.png
do
f=`basename $file`
echo $f
#画像サイズを統一する
convert -resize 512 $folder1/$f tmp1.png
convert -resize 512 $folder2/$f tmp2.png
#画像平均をとる
convert -average tmp1.png tmp2.png $out_dir/$f
done
ffmpegコマンドを利用してフレーム画像から動画に戻す
ffmpeg -r 15 -i mov_out/$04d.png -c:v huffyuv -an out.mkv
フレームレートは15、動画コーデックは可逆圧縮のhuffyuv、音声なしで動画を作成します。
以上で、GFPGANの適用方法は終了です。しかし、今回は30フレーム程度の動画ですぐに終了しますが、通常は1分程度のショート動画でも1800〜3600フレームを処理する必要があります。高速化方法としての並列処理の方法を次回の②にて紹介します。
以下、関連する【PR】です。