現在、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