NAS で ffmpeg

ローカルの 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 の新しいバージョンがあります。

まずはそのリストを表示するために、パッケージセンター右上にある「設定」タブを押して以下のように設定します。

名前 : SynoCommunity
場所 : 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 に移行しました。今度こそ動くと思います。