エンコードはAtom系を含む多くのインテル系CPUでハードウェアエンコードが可能なQSVに対応したFFmpegを使うためにLibVA、GmmLib、Intel Media Driver、Intel Media SDKのビルドとインストールを行う。
sudo apt install git make automake libtool cmake g++ pkg-config libdrm-dev -y git clone https://github.com/intel/libva.git && cd libva && ./autogen.sh && make && sudo make install && cd .. git clone https://github.com/intel/gmmlib.git && cd gmmlib && mkdir build && cd build && cmake .. && make && sudo make install && cd ../.. git clone https://github.com/intel/media-driver.git && cd media-driver && mkdir build && cd build && cmake .. && make && sudo make install && cd ../.. git clone https://github.com/Intel-Media-SDK/MediaSDK.git && cd MediaSDK && mkdir build && cd build && cmake .. && make && sudo make install && cd ../.. echo '/opt/intel/mediasdk/lib' | sudo tee /etc/ld.so.conf.d/imsdk.conf && sudo ldconfig
最終的なCMカットやロゴ除去はAVSファイルで指定するのでAviSynth+が必要になる。また、AVSファイル内でTSファイルを読み込むためにL-SMASH Worksが必要になるので、L-SMASH Worksの前提となるL-SMASHとFFmpegが必要になるので、これらのビルドとインストールを行う。
sudo apt install git make meson gcc nasm cmake g++ pkg-config libdevil-dev -y git clone https://github.com/AviSynth/AviSynthPlus.git && cd AviSynthPlus && mkdir build && cd build && cmake .. && make && sudo make install && cd ../.. git clone https://git.ffmpeg.org/ffmpeg.git && cd ffmpeg && PKG_CONFIG_PATH=/opt/intel/mediasdk/lib/pkgconfig ./configure --enable-gpl --enable-avisynth --enable-libmfx && make && sudo make install && cd .. git clone https://github.com/l-smash/l-smash.git && cd l-smash && ./configure --enable-shared && make && sudo make install && cd .. git clone https://github.com/HomeOfAviSynthPlusEvolution/L-SMASH-Works.git && cd L-SMASH-Works/AviSynth && LDFLAGS="-Wl,-Bsymbolic" meson build && cd build && ninja && sudo ninja install && cd ../../..
最初に必要になるのが、無音部分やシーンチェンジ部分の位置を検出してテキストファイルに出力するchapter_exeで、次に必要になるのが、透過ロゴの位置を検出したテキストファイルと透過ロゴを除去するAVSファイルに出力するlogoframeで、これらの出力を統合してCMカット情報のAVSファイルを出力するのがjoin_logo_scpとなる。これに加えてlogoframeで出力した透過ロゴを除去するAVSファイルで使われているAviSynthの透過ロゴ除去プラグインのdelogoも必要になるので、これらのビルドとインストールを行う。
git clone https://github.com/tobitti0/chapter_exe.git && cd chapter_exe/src && make && sudo cp chapter_exe /usr/local/bin/ && cd ../.. git clone https://github.com/tobitti0/logoframe.git && cd logoframe/src && make && sudo cp logoframe /usr/local/bin/ && cd ../.. git clone https://github.com/tobitti0/join_logo_scp.git && cd join_logo_scp/src && make && sudo cp join_logo_scp /usr/local/bin/ && cd .. && sudo cp -r JL /usr/local/etc/ && cd .. git clone https://github.com/tobitti0/delogo-AviSynthPlus-Linux.git && cd delogo-AviSynthPlus-Linux/src && sed -i -e 's/^LDLAGS = -shared -fPIC/LDLAGS = -shared -fPIC -lstdc++/' Makefile && make && sudo make install && cd ../..
EPGStationでCMカット&ロゴ除去エンコードを行うためのシェルスクリプトをEPGStationのconfigディレクトリにjlse.shの名前で作成してconfig.ymlに登録する。
cd EPGStation cat << 'EOT' > config/jlse.sh #!/bin/sh tmp=`mktemp -d` echo "TSFilePath=\"$INPUT\"" > $tmp/input.avs echo "LWLibavVideoSource(TSFilePath, fpsnum=30000, fpsden=1001)" >> $tmp/input.avs echo "AudioDub(last, LWLibavAudioSource(TSFilePath, av_sync=true))" >> $tmp/input.avs chapter_exe -v $tmp/input.avs -o $tmp/chapter_exe.txt if [ $? -ne 0 ]; then cat /dev/null > $tmp/chapter_exe.txt; fi logo="SID`expr $CHANNELID % 100000`" ls /usr/local/etc/logo/$logo*.lgd if [ $? -ne 0 ]; then logo=""; fi logoframe $tmp/input.avs -logo "/usr/local/etc/logo/$logo*.lgd" -oa $tmp/logoframe.txt -o $tmp/logoframe.avs case $CHANNELID in 3208043008 | 3272102056 | 400101 | 400103 ) jl="JL_NHK.txt" ;; 3272202064 | 400161 ) jl="JL_MBS.txt" ;; 700333 ) jl="JL_ATX.txt" ;; * ) jl="JL_標準.txt" ;; esac join_logo_scp -inlogo $tmp/logoframe.txt -inscp $tmp/chapter_exe.txt -incmd "/usr/local/etc/JL/$jl" -o $tmp/join_logo_scp.avs cat $tmp/input.avs $tmp/logoframe.avs $tmp/join_logo_scp.avs > $tmp/input_cut.avs videoheight=`echo "$VIDEORESOLUTION" | sed -e 's/[^0-9]*\([0-9]*[0-9]\).*/\1/'` if [ $videoheight -gt 720 ]; then ab="192k"; scale=",scale=-2:720"; else ab="128k"; scale=""; fi if [ "$AUDIOCOMPONENTTYPE" = "2" ]; then dualmonomode="-dual_mono_mode main"; else dualmonomode=""; fi $FFMPEG -hwaccel qsv -hwaccel_output_format qsv -y $dualmono -f avisynth -i $tmp/input_cut.avs -movflags faststart -vf yadif$scale -preset 7 -aspect 16:9 -c:v h264_qsv -q:v 23 -f mp4 -c:a libfdk_aac -ar 48000 -ab $ab -ac 2 "$OUTPUT" if [ $? -ne 0 ]; then rm -f "$OUTPUT"; rm -f "$INPUT.lwi"; rm -rf $tmp; exit 1; fi rm -f "$INPUT.lwi" rm -rf $tmp exit 0 EOT chmod +x config/jls.sh sed -i -e "/^encode:/a\ - name: CMCUT\n cmd: '/bin/sh %ROOT%/config/jlse.sh'\n suffix: .mp4\n rate: 4.0" config/config.yml cd .. sudo mkdir /usr/local/etc/logo
上記スクリプトは、/usr/local/etc/logoディレクトリに透過ロゴのlgdファイルを用意しておく必要がある。透過ロゴのlgdファイルはWindows上でAmatsukaze等を使って別途作成したものをlogoディレクトリに予めコピーしておく。尚、lgdファイルが1つも無い状態だとlogoframeが文字化けしたファイルをいくつか作成するので注意。
定時後、第二神明で帰宅。歯医者へ。新しい義歯を取り付けて調整して終わり。古い義歯も付けられないことないからってことで手元に置いておくことに。終わってから帰宅。麻酔もしてないのですぐに晩御飯。カツ丼とコーンスープ。
明日の東京行きの新幹線を朝食後に出て午後イチに着く便から朝イチの始発に変更。これで綾瀬水門あたりをのんびり歩き回る時間が確保できる。
長らく自室のこたつ上に置いてたThinkCentre M75q-1 Tinyを勝手口頭上サーバーラックに移設して、NAS整理用のHDDコピーマシンとして設置。早速、ケースに入れた2TB HDDを繋いでメインNASの空き容量を確保すべくコピーを開始。これで録画PCも空いたNASにコピーすることでさらに空き容量を確保することが出来る。