スクランブルを解除してついでにエンコードするスクリプトを書いた話

9月18日に全国公開された「劇場版 ヴァイオレット・エヴァーガーデン」。京アニ事件以来の京都アニメーションの作品である。私は、原作は未読だが、3週間限定で劇場公開された「ヴァイオレット・エヴァーガーデン 外伝 -永遠と自動手記人形- 」を観に行っていたので、「劇場版」の方も見ようと思っていた。しかし、問題があった。私はTVアニメの方も見ていないのである。しかも「劇場版」はどうやらTVアニメの続編的な立ち位置のようで、TVアニメの方を見ていないと楽しさが半減してしまうのではないかと思い、TVアニメの方を見ようと思い至った。

配信サービスを使って見ようと思ってもみたが、昔に自分で立てた録画鯖で録画していた記憶があり、録画番組の記録から検索してみると録画した形跡があった。最初の放送と劇場版公開に合わせて行われた再放送の両方とも録画してあった。

しかし、ここで問題があった。今では録画鯖に使っているラズパイ4の電源のおかげでチューナーとどっかに転がっていたB-CASカードを使って録画時にスクランブル解除を同時に行えているのだが、ヴァイオレット・エヴァーガーデンを録画していた当時のラズパイ3の貧弱な電源ではチューナーを使いながらB-CASカードを利用することができず、録画データを再生するにはいちいちスクランブル解除を手動で行わなければならなかった。

そのため、「劇場版」を見に行く前にTVアニメの方を予習するため録画データを掘り起こしスクランブル解除をする必要があった。というわけで、スクランブルがかかった状態の録画データを一旦集めて、ラズパイ4に転送し、スクランブル解除をして、ついでにエンコードしてしまおうと考えた。

というわけで、その時に使ったスクリプトが以下のものである。念の為、スクランブルを解除したファイルを一旦生成しそのファイルをエンコードしてファイルサイズを小さくするという方法をとっているが、これは最初にテストで適当に書いたスクリプトに通したらファイルサイズが0になってしまい、ファイル転送からやり直す羽目になったためである。

#!/bin/sh
filename=$1
tmpname=${1%.ts}.m2ts
outputname=${1%.ts}.mp4
b25 "$filename" "$tmpname"
ffmpeg -i "$tmpname" -codec:v h264_omx -b:v 3000k -s 1280x720 -crf 23 "$outputname"

 ffmpegでのコーデックの指定が単なるh264ではなくh264_omxになっているのはラズパイ4のハードウェアエンコードを利用しているためである。speedはサイズ変更を行っているため0.75xぐらいに落ちるがその分ファイルサイズが小さくなると思うと妥協できる。

そんなこんなでスクランブルがかかっていた録画データをスクランブル解除しついでにエンコードする事ができた。あとは見て、劇場に足を運ぶだけである。