ローカルの linux mint 21.1 の ffmpeg では、以下のようにしてテレビ番組を録画することができます。
ffmpeg -i http://redlabmcdn.s.llnwi.net/hoge/index.m3u8 -c copy -bsf:a aac_adtstoasc ./video.mp4
しかし、このコマンドは synology NAS DS 718+ 上では動きません。
ffmpeg そのものはあるようですが。
アレコレやってみたもののどうしてもできないので、NAS DS 718+ にある virtual machine に linux mint 21.1 xfce を設定してその中で ffmpeg を動かしてみました。
ローカルの virtualbox 上で設定しておいて ova ファイルとしてエクスポートして、NAS にアップロードした後で NAS の virtual machine でインポートすれば簡単に移植することができます。
ローカルの linux mint は使わない時は電源をオフにしますが、NAS はずっと電源が入ったままです。
なので、いつでも設定した通りに録画されるはずです。
ffmpeg の新しいバージョンをダウンロード・インストール
synology のオフィシャルではないもののダウンロードできるサードパーティのアプリがあって、その中に ffmpeg の新しいバージョンがあります。
まずはそのリストを表示するために、パッケージセンター右上にある「設定」タブを押して以下のように設定します。
場所 : https://packages.synocommunity.com/

そうすると、パッケージセンターに「コミュニティ」が出現するので、そこから ffmpeg をインストールします。

ffmpeg のパスを通す
synology nas に ssh ログインします。
/etc/profile を編集します。
一番前に「/volume1/@appstore/ffmpeg/bin:」を追加。
PATH=/volume1/@appstore/ffmpeg/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
設定を反映します。
source /etc/profile
バージョン確認。
ffmpeg -version
ffmpeg version 4.4.3-47 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 7.5.0 (GCC)
configuration: --target-os=linux --cross-prefix=/home/spksrc/tvh-update/spksrc/toolchain/syno-x64-7.0/work/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- --prefix=/var/packages/ffmpeg/target --extra-cflags=-I/home/spksrc/tvh-update/spksrc/spk/ffmpeg/work-x64-7.0/install/var/packages/ffmpeg/target/include --extra-ldflags=-L/home/spksrc/tvh-update/spksrc/spk/ffmpeg/work-x64-7.0/install/var/packages/ffmpeg/target/lib --extra-libs='-lxml2 -ldl' --pkg-config=/usr/bin/pkg-config --ranlib=/home/spksrc/tvh-update/spksrc/toolchain/syno-x64-7.0/work/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-ranlib --enable-cross-compile --enable-rpath --enable-pic --enable-shared --enable-gpl --enable-version3 --enable-avresample --disable-debug --disable-static --disable-doc --extra-version=47 --extra-cflags=-DSYNO_VIDEOSTATION --extra-cflags=-fno-if-conversion --extra-cflags=-O3 --extra-cflags=-Wno-deprecated-declarations --enable-libcodec2 --enable-libxml2 --enable-demuxer=dash --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libopenjpeg --enable-libmp3lame --enable-libbluray --enable-libspeex --enable-libtheora --enable-libcaca --enable-libdc1394 --enable-libvorbis --enable-libwebp --enable-libzmq --enable-gnutls --enable-libopus --enable-libsoxr --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librabbitmq --enable-libzvbi --enable-libx264 --enable-libx265 --enable-libvpx --enable-libshine --enable-chromaprint --enable-libdav1d --enable-frei0r --enable-librist --enable-libzimg --enable-libfdk-aac --enable-nonfree --enable-libaom --enable-libsvtav1 --enable-libsvthevc --arch=x86_64 --enable-vaapi --enable-libmfx --enable-libdrm
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
以前は、version 4.1 でした。
録画できるかどうかチェックします。
ffmpeg -i http://redlabmcdn.s.llnwi.net/hoge/index.m3u8 -c copy -bsf:a aac_adtstoasc aaa.mp4
録画できました。
ということは、virtual machine なんて面倒なことをすることなくテレビ録画ができます。
DSM が古い方の ffmpeg しか認識しない
nas に ssh ログインして ffmpeg を動かすと期待通りに録画できるのですが、いつものようにタスクスケジューラで録画しようとすると以下のようなエラーが出ます。
ffmpeg version 4.1.8 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 8.5.0 (GCC)
configuration: --prefix=/usr --incdir='${prefix}/include/ffmpeg' --arch=i686 --target-os=linux --cross-prefix=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- --enable-cross-compile --enable-optimizations --enable-pic --enable-gpl --enable-shared --disable-static --disable-stripping --enable-version3 --enable-encoders --enable-pthreads --disable-protocols --disable-protocol=rtp --enable-protocol=file --enable-protocol=pipe --disable-muxer=image2 --disable-muxer=image2pipe --disable-swscale-alpha --disable-ffplay --disable-ffprobe --disable-doc --disable-devices --disable-bzlib --disable-altivec --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libmp3lame --disable-vaapi --disable-cuvid --disable-nvenc --disable-decoder=aac --disable-decoder=aac_fixed --disable-encoder=aac --disable-decoder=amrnb --disable-decoder=ac3 --disable-decoder=ac3_fixed --disable-encoder=zmbv --disable-encoder=dca --disable-decoder=dca --disable-encoder=ac3 --disable-encoder=ac3_fixed --disable-encoder=eac3 --disable-decoder=eac3 --disable-encoder=truehd --disable-decoder=truehd --disable-encoder=hevc_vaapi --disable-decoder=hevc --disable-muxer=hevc --disable-demuxer=hevc --disable-parser=hevc --disable-bsf=hevc_mp4toannexb --x86asmexe=yasm --cc=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-wrap-gcc --enable-yasm --enable-libx264 --enable-encoder=libx264
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
http://redlabmcdn.s.llnwi.net/hoge/index.m3u8: Protocol not found
Did you mean file:http://redlabmcdn.s.llnwi.net/hoge/index.m3u8?
要するに DSM は古い方の ffmpeg しか動かさないようで、その設定方法が現在のところわからないので、やはり virtual machine で動かすしかないようです。
php でもそうでしたが、どうも2重構造になっているようでよくわかりません。
cron でやっと動いた
nas に ssh ログインして、
sudo -i
cron を設定します。
nano /etc/crontab
コマンドを追加します。
32 17 * * * user timeout 30 /volume1/homes/user/shell/BSfuji.sh
「/volume1/homes/user/shell/BSfuji.sh」は動くのに、この cron は動きません。
cron の再起動が必要との記事を見つけたのですが、そこに書いてあるコマンドではダメです。
cron の再起動は以下のようにするようです。
synosystemctl restart crond
でもやはり動かない。
諦めかけていた時に気づきました。
cron にパスの設定があります。
MAILTO=""
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
#minute hour mday month wday who command
37 2 * * 2 root /usr/syno/bin/synoschedtask --run id=2
52 14 * * * root /usr/syno/bin/synoschedtask --run id=3
0 3 * * 6 root /usr/syno/bin/synoschedtask --run id=1
32 17 * * * user timeout 30 /volume1/homes/user/shell/BSfuji.sh
この PATH の最初に「/volume1/@appstore/ffmpeg/bin:」を追加すれば、この cron は動きます。
でも、タスクスケジューラの方から設定しても動きません。
この辺がよくわかりませんが、cron で動けば問題ありません。
virtual machine の cron 設定をすべて nas に移行しました。今度こそ動くと思います。