Python version of the SplatoonKillDigestMaker
SplatoonKillDigestMakerはスプラトゥーン2で撮り溜めた動画を何とか供養したいという思いで作られた、キルシーン自動生成プログラムです。 古典的なテンプレートマッチング手法を使ってキルシーンを切り出し、自動で動画編集します。 SplatoonKillDigestMakerはもともとWindows上のVisual Studioを用いてC++で開発されていましたが、 Visual Studioの度重なるバージョン変更により、プログラムの保守が難しくなったため、Pythonバージョンに新たに移行しました。
- Ubuntu 20.04 on wsl2
- Python 3.6.13
- https://qiita.com/whim0321/items/ed76b490daaec152dc69
- https://www.kkaneko.jp/tools/wsl/wsl2.html
- (私はこの方法でやってないので保証できません・・・。)
- 動画ファイルをTargetFilesの中に入れる
- youtube_url.txtにYouTubeのURLを貼り付ける
- 複数行に対応。最後に改行を入れること
- ダウンロードの終了したファイルはTargetFilesに置かれています
- TargetFilesの中身に、対象にしたい動画以外の動画が入っていないか確認する
- 対象ではない動画が入っていた場合は削除か他のディレクトリに移動する
python3 kill_digest_maker.py
- 引数で入力を与えられるようにする
- 自分の環境構築時の手順を記載しておく
- WSL2およびUbuntuはインストール済みとする
sudo apt install -y git
sudo apt install -y build-essential
sudo apt install -y wget libbz2-dev libreadline-dev libssl-dev libsqlite3-dev cmake
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib;' >> ~/.bashrc
source ~/.bashrc
CONFIGURE_OPTS=--enable-shared pyenv install 3.6.13
sudo apt install -y yasm libx264-dev libx265-dev
cd ~
mkdir ~/tools
cd ~/tools
wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
tar -zxvf pkg-config-0.29.2.tar.gz
cd cd pkg-config-0.29.2
./configure --with-internal-glib
make -j8
sudo make install
cd ~/tools
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/ffmpeg/7:4.3.2-0+deb11u2ubuntu1/ffmpeg_4.3.2.orig.tar.xz
tar Jxfv ffmpeg_4.3.2.orig.tar.xz
cd ffmpeg-4.3.2
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig
./configure --enable-shared --enable-gpl --enable-version3 --enable-libx264 --enable-libx265
make -j8
sudo make install
sudo add-apt-repository ppa:rock-core/qt4
sudo apt install libqt4-dev
sudo apt install qttools5-dev-tools qtbase5-dev
sudo apt install libasound2-dev
sudo apt install sqlite libsqlite-dev
cd ~/tools
wget https://sourceforge.net/projects/avidemux/files/avidemux/2.7.8/avidemux_2.7.8.tar.gz
tar -zxvf avidemux_2.7.8.tar.gz
cd avidemux_2.7.8
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig
bash bootStrap.bash
sudo cp -R install/usr/* /usr/ **
Avidemuxの動作確認(現versionでは未使用)
avidemux3_cli
いろいろと出てくればOK(現versionでは未使用)
mkdir ~/workspace
cd ~/workspace
git clone https://github.com/t-ogura/SplatoonKillDigestMakerPy.git
cd SplatoonKillDigestMakerPy
pyenv virtualenv 3.6.13 KDM
pyenv local KDM
sudo apt install pip
cd ~/workspace/SplatoonKillDigestMakerPy
pip install --upgrade pip
pip install -r requirements.txt
Docker環境では、libopencv-devのインストールが必要なようです。 (はりぃ様情報提供ありがとうございます。)
元動画の画質が悪い場合正しく検出できないことがあります。 「init.txt」にあるTAMPLATE_MATCHING_THRESHOLDの値を低くすることで、 今まで検出できなかったものが検出できるようになる場合があります。 ただし下げ過ぎると誤検出が増えるので注意。 推奨は0.80~0.85程度になります。 また可変フレームレートの動画の場合、正しい位置でキルシーンを切り出せません。 現在対応中ですが、固定フレームレートの動画に変換することで解決できそうです。
※可変フレームレートの動画の場合、正しい位置でキルシーンを切り出せない不具合を確認しています。 現在対応中ですが、固定フレームレートの動画に変換することで解決できそうです。 こちらで対応中です。#1
「init.txt」にあるCANDIDATE_FRAME_NUMを5.0より大きく(5.1, 6.0等)にすると、 単独キルの検出が誤認識扱いとされ、連続キルのシーンのみ抽出が出来るようになります。 ただし、同時に2体倒した等のシーンは単独キルと同様に5秒間しか表示がないため、 連続キルとしての抽出にはなりません。
「init.txt」にあるADDITIONAL_TIME_BEFORE_KILLとADDITIONAL_TIME_AFTER_KILLを調節してみてください。 その場合、この2つの値の合計値がCONNECTING_INTERVALより大きくならないように気を付けてください。 CONNECTING_INTERVALの値を超えてしまうと、完成動画でまれに時間の巻き戻りが起きます。 その場合はCONNECTING_INTERVALの値を大きくして調整してください。
「init.txt」にあるVIDEO_CODECで指定することが可能です。 ffmpegで利用可能なコーデックを指定できます。 ただし、デフォルトでffmpegに搭載されているコーデック以外は、 ffmpegの環境構築時に設定する必要があります。 上記の環境構築例では、libx264のほかにlibx265が使えるようにしていますので、ご活用ください。 MicrosoftのInsider Programのdevチャネルに加入しているとWSL2でもnvenc使えそうですよ。(上級者向け) あとはWSL2からWindows環境のコマンドが実行できるらしいので、 うまく活用すればグラボを使ったエンコードが出来そうですね。(上級者向け)
私の環境ではnvencが使えるようになりました。 エンコードの速度が全然違うのでWindows11がリリースされたらおすすめしたいです。
こちらを参考にした
- TPM2.0が有効になっていないことが原因かも
- 自分の環境の場合BIOS画面から有効にすることができた
こちらを参考にした
- 最終的にこれで落ち着いた
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig
./configure --enable-shared --enable-gpl --enable-libx264 --enable-libx265 --enable-cuda-nvcc --enable-cuvid --enable-nvenc --enable-nonfree --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --enable-libsnappy --enable-openssl --nvccflags="-gencode arch=compute_75,code=sm_75 -O2"
- 理由はよくわからないけどこれでうまくいった
- 参考:NVIDIA/cuda-samples#46