Raspberry PiでEPGStationの録画データを自動CMカットしてエンコードする

Raspberry PiとPX-W3PE4を利用してDockerを利用しないでMirakurunとEPGStationを構築する

録画できるようになったので、自動でCMカットしてエンコードされるようにしようと思います。

Advertisement

CMカットにjoin_logo_scpを利用

join_logo_scpというツールがCMカットの精度が高いようなので利用します。

個人的には別に消さなくても良いのですが、ロゴの消去もできるようです。

環境について

ここから構築する環境はハードウェアに依存するところが多いようです。

私の環境はRaspberry Pi OS Lite 32bitを導入したRaspberry Pi4なので、それに合わせたコマンドなどになっています。

構築

Raspberry Pi (Linux)のCMカットでjoin_logo_scpを使う(wineなし)

基本的にこちらのページを参考に進めていきます。

ARMなjoin_logo_scpの環境の導入について。実際に使用したソースファイル群とエラー集

なお、l-smash、ffmpeg、L-SMASH-Worksあたりでインストールが上手く行かなかった場合はこちらのページを参考にしてみてください。

パッケージのインストール

sudo apt-get install build-essential cmake ninja-build libmp3lame-dev libopus-dev libvorbis-dev libvpx-dev libx265-dev libx264-dev libavcodec-dev libavformat-dev libswscale-dev libatomic-ops-dev automake libtool autoconf nodejs
sudo apt-get install meson npm
sudo apt-get install libxft-dev

インストールしてください。

fdk-aacのインストール

cd
git clone https://github.com/mstorsjo/fdk-aac.git
cd fdk-aac
./autogen.sh
./configure
make -j4
sudo make install
sudo /sbin/ldconfig

インストールしてください。

l-smashのインストール

cd
git clone https://github.com/l-smash/l-smash.git
cd l-smash
sudo ./configure --enable-shared
sudo make
sudo make install
sudo ldconfig

インストールしてください。

AviSynthPlusのインストール

cd
git clone --depth 1 git://github.com/AviSynth/AviSynthPlus.git
cd AviSynthPlus
mkdir avisynth-build
cd avisynth-build
cmake -DCMAKE_CXX_FLAGS=-latomic ../ -G Ninja
ninja
sudo ninja install

インストールしてください。

ffmpegのインストール

aptでインストールできるやつはAviSynthPlusが使えないらしいのでビルドする必要があるみたいです。

cd
git clone --depth 1 https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
./configure --extra-ldflags="-latomic" --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --arch=armel --target-os=linux --enable-gpl --disable-doc --disable-debug --enable-pic --enable-avisynth --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-nonfree --enable-mmal --enable-omx-rpi --enable-omx --extra-libs=-ldl
make -j4
sudo make install

インストールしてください。

L-SMASH-Worksのインストール

cd
git clone https://github.com/HolyWu/L-SMASH-Works.git
git clone https://github.com/tobitti0/chapter_exe.git -b arm-test
sudo cp chapter_exe/src/sse2neon.h L-SMASH-Works/AviSynth/emmintrin.h
cd L-SMASH-Works/AviSynth

ダウンロードし、

nano meson.build

で開き、

'../common/lwsimd.c',
'../common/lwsimd.h',

この2行を削除し、

if host_machine.cpu_family().startswith('arm')
add_project_arguments('-mfpu=neon', language : ['c', 'cpp'])
endif

をif host_machine.cpu_family()とif host_machine.system()の処理の間に追加します。

nano video_output.cpp

で開き、

#include "../common/lwsimd.h"

を削除します。

CC=gcc CXX=gcc LD=gcc LDFLAGS="-Wl,-Bsymbolic,-L/opt/vc/lib" meson build
cd build
ninja -v
sudo ninja install
sudo reboot

再起動しておきます。

join_logo_scpのインストール

cd
git clone --recursive https://github.com/tobitti0/JoinLogoScpTrialSetLinux.git
cd JoinLogoScpTrialSetLinux/modules/logoframe/src
make
cd && cp JoinLogoScpTrialSetLinux/modules/logoframe/src/logoframe JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/bin/logoframe
cd JoinLogoScpTrialSetLinux/modules/join_logo_scp/src
make
cd && cp JoinLogoScpTrialSetLinux/modules/join_logo_scp/src/join_logo_scp JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/bin/join_logo_scp
cd chapter_exe/src
make
cd && cp chapter_exe/src/chapter_exe JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial/bin/chapter_exe
cd JoinLogoScpTrialSetLinux/modules/join_logo_scp_trial

ダウンロードして、

Amatsukazeを利用してロゴファイルを生成する

ロゴを作成し、

cp -r /mnt/hdd/logo .

作成したロゴをコピーしてきます。

sudo npm install
sudo npm link
jlse --help

と実行してインストールします。

最後のコマンドでオプションが表示されればOKです。

delogo-AviSynthPlus-Linuxのインストール

せっかくなのでロゴ消しもします。

cd /tmp
git clone https://github.com/tobitti0/delogo-AviSynthPlus-Linux.git
cd delogo-AviSynthPlus-Linux/src
make
sudo make install

インストールしてください。

動作チェック

jlse -i 録画ファイルパス -e -t cutcm_logo -o " -c:v h264_omx -vf pullup=jb=54 -preset veryfast -acodec aac -ab 320K -b:v 5M -aspect 16:9 -r 24000/1001 -bsf:a aac_adtstoasc " -r

これでエンコードができればOKです。

EPGStationから自動エンコードさせる

こちらのページに書かれているスクリプトを参考に作成します。

nano ~/EPGStation/config/jlse.js

で新規にスクリプトを作成します。

上のページに書かれているスクリプトをコピーし、

const args = ['-y'];
const preset = 'veryfast';
//const codec = 'libx264';
const codec = 'h264_omx'; 
//const crf = 23;
const bitrate = '5000k';
const videoFilter = 'yadif';

ハードウェアエンコード用にプリセットやコーデックを変更し、利用できないcrf値の代わりにビットレートを代入します。

Array.prototype.push.apply(args,[
'-vf', videoFilter,
'-preset', preset,
'-aspect', '16:9',
'-c:v', codec,
//'-crf', crf,
'-b:v', bitrate,
'-f', 'mp4',
]);

利用できないcrf値の代わりにビットレートを利用するように修正します。

nano ~/EPGStation/config/config.yml

で開き、

encode:
- name: jlse
cmd: '%NODE% %ROOT%/config/jlse.js'
suffix: .mp4
rate: 4.0

を記述します。

Advertisement

これで録画後に自動でCMカットやロゴ削除が行われた状態でハードウェアエンコードされるようになりました。非常に便利。