録画された ts ファイルを処理する

現在、2 つの NAS でいろいろと録画しており、それを処理して一つの mp4 に変換しています。

それらの NAS で録画された ts ファイルを手動でローカルにダウンロードして処理していましたが、どうにも面倒なので半分自動化することにしました。

NAS から ts ファイルをダウンロードする

現在、録画している NAS は 2 台あります。

ここからローカルマシーンに ts ファイルをダウンロードします。

鍵認証ができていると、パスワードを入力することなく NAS に ssh ログインできます。

以下のようなシェルスクリプトを実行すれば、簡単に ts ファイルがダウンロードされます。


#!/bin/sh

rm -r ~/iptv/Italy/ts/
scp -rp -P 11123 user@192.168.0.20:/volume1/bak/iptv/Italy/ts ~/iptv/Italy
scp -rp -P 11123 user@192.168.0.18:/volume1/bak/iptv/Italy/ts ~/iptv/Italy

「scp -rp」とすることによって ts ファイルのタイムスタンプが維持されるので、後で処理をする時に便利です。

ts ファイルをまとめて mp4 に変換する

これはどこかに書きましたが、以下のようなシェルスクリプトを実行するだけです。


#!/bin/sh

rm -r ./temp/*.*

for i in `\find ts -maxdepth 3 -a -xtype f -a -name "*.ts" | sort`; do
    echo file "'$i'"
done > list.txt

ffmpeg -f concat -i list.txt -c copy ./temp/Italy_`date +%Y%m%d`.ts

for file in ./temp/*.ts; do
    echo $file
    faname_ext="${file##*/}"
    fname="${faname_ext%.*}"
    ffmpeg -i $file -c:v copy -c:a copy ./mp4/$fname.mp4
done

出来上がった mp4 ファイルを適当に rename して、自宅内サーバーの jstree にアップすればコンテンツまでのアクセスも簡単です。

NAS に ssh ログインして iptv をリセット

NAS にはどんどん ts ファイルが積み上がってくるので、それを削除するためにこれまではいちいち NAS を開いて削除していましたが、流石に面倒なのでこれもシェルスクリプトで実行するようにします。


#!/bin/sh

ssh -p 11123 user@192.168.0.20 "cd /volume1/bak;rm -r iptv;cp -r /volume1/backup/iptv /volume1/bak"

このようにすると、貯まっていた ts ファイルを iptv ごと削除して、他の場所にあった空っぽの iptv がコピーされます。

sudo -i をシェルスクリプトにしても動かない

crontab の編集も自動化しようとしたのですが、それは NAS ではかなり難しいようです。


echo パスワード | sudo -S コマンド

ネット情報を見ながら、chatGPTにも相談したのですがうまくいきません。

以下のようなヒアドキュメントも実行されません。


# SSH接続
ssh -p 11123 user@192.168.0.20 <<EOF
    cd /volume1/bak/iptv
    sudo sh ./editcron.sh
EOF

ssh 接続とそれ以下のコマンドは別々にすれば実行できるのですが、シェルスクリプトは動きません。

なので今のところ、それぞれコピペで動かすしかないと思います。

sudo -i をパスワードなしで

やはり、NAS に ssh ログインしていろいろ設定するのは非常に面倒です。

NAS のファイルマネージャーでも面倒です。

そこで、やはりローカルからいろいろ操作します。

そのためには、NAS で sudoers を編集する必要があります。
NAS に ssh ログインして編集します。


sudo vi /etc/sudoers

一番下に1行追加します。


user_name ALL=(ALL) NOPASSWD:ALL

user_name は NAS にログインしているユーザー名です。

これで、パスワードなしで sudo になれますが、これはある意味怖い設定でもあります。複数のログインがあるような場合にはかなり気を使うかもしれません。

すべての作業をローカルで

sudo -i になるためのパスワードを省略できれば、NAS の cron も全てはローカルで設定できます。

まずは、NAS から cron の設定状況をダウンロードします。


#!/bin/sh

rm ~/iptv/zNAScron/NAS720/crontab_backup.txt
scp -P 11123 user@192.168.0.20:/volume1/bak/iptv/crontab_backup.txt ~/iptv/zNAScron/NAS720

crontab_backup.txt をローカルでテキストエディタで編集します。

編集が終わったら NAS にアップロードして、cron を再起動します。


#!/bin/sh

scp -P 11123 ~/iptv/zNAScron/NAS720/crontab_backup.txt user@192.168.0.20:/volume1/bak/iptv

# SSH接続
ssh -p 11123 user@192.168.0.20 <<EOF
    cd /volume1/bak/iptv
    sudo sh ./editcron.sh
EOF

ちなみに、editcron.sh は以下のようになっています。


#!/bin/bash

cat /volume1/bak/iptv/crontab_backup.txt | sudo tee /etc/crontab > /dev/null
synosystemctl restart crond