0%

群晖VideoStation支持DTS、EAC3、TrueHD

引言

由于群晖没有获得DTS的版权,因此群晖自带的VideoStation从某个版本开始不支持DTS、EAC3、TrueHD的音频格式,严重影响使用体验。搜索该问题,得到的答案均为将VideoStation降级到2.3.4-1468,但是这个版本的VideoStation不支持HEVC和4K解码,比较鸡肋。本文将利用第三方的ffmpeg替换VideoStation中自带的ffmpeg,实现对全视频格式的支持。

操作方法

安装ffmpeg

  1. 下载对应版本的ffmpeg安装包,其中DS918+对应的版本是apollolake,具体每个机型对应的版本可以在以下连接中找到:https://github.com/SynoCommunity/spksrc/wiki/Architecture-per-Synology-model

    下载地址:https://github.com/th0ma7/synology/tree/master/packages

  2. 登录DSM,打开套件中心,点击手动安装,选择刚刚下载的文件进行安装。

  3. 在DSM中打开控制面板,选择终端机和SNMP,勾选启动SSH功能,并调整对应的端口号。

  4. 用XSheel等软件以SSH的方式登录到NAS中,执行以下命令:

    1
    2
    3
    sudo chmod +s /var/packages/ffmpeg/target/bin/ffmpeg
    sudo chmod +s /var/packages/ffmpeg/target/bin/ffprobe
    sudo chmod +s /var/packages/ffmpeg/target/bin/vainfo

安装VideoStation

  1. 登录DSM,打开套件中心,安装最新版的VideoStation,本文撰写时,版本为2.4.7-1603,经测试,以下版本适用于本方法,其他版本未测试:2.4.6-15942.4.7-1603

  2. 用XSheel等软件以SSH的方式登录到NAS中,执行以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 备份
sudo sed -i'-BACKUP' -e 's/eac3/ZAAP/' -e 's/dts/ZAP/' -e 's/truehd/ZAPZAP/' /var/packages/VideoStation/target/lib/libsynovte.so
sudo mv /var/packages/VideoStation/target/bin/ffmpeg /var/packages/VideoStation/target/bin/ffmpeg-BACKUP
sudo mv /var/packages/VideoStation/target/bin/ffprobe /var/packages/VideoStation/target/bin/ffprobe-BACKUP
sudo mv /var/packages/VideoStation/target/bin/vainfo /var/packages/VideoStation/target/bin/vainfo-BACKUP

# 更新/var/packages/VideoStation/target/ffmpeg为自定义脚本,调用第三方的ffmpeg
# 具体脚本信息见附录
sudo su
echo "H4sICEoigl4AA2ZmbXBlZwCtU8tOwzAQvO9XLEmkPlAwrRCHVokqBOILOEUVctN1YtE8FFumEvDvOA9KSQInfEhsZ2ZnPN64F2wnc7bjKgWws8ChI8XIDK9YyeMXnpBiQmQlJUzzKiHd4NsdB8DF+4e7p0egOC3Q8TYOhiEynZUd5OpQJACWqILpDF5TeSCMIvRc9BON17jdwr6AmCuy7IWDMge0wzdlVQgLnjVLO1Qqhf5a1PUug6njH5e3Nx3SaQqc8Ot1V0iMl3CNCLxpZ9sKv6OiPfqEE3veosq4DnKzWF7NVcwP9Gw4LyU7nyeTDu2x1RmBTU56jUyXT7cciGoi9Hk/sf9zAz/ttNJGrDDyjNiO3lY/YyPqaO1zkK0cjzYrjKSgPuCgluzdUi+e1l7Lj7zm/afHzsh81hfqdQIpHkPrcV/kBKBIo+9bL281I9psP/q97Nk2/7WhG8TI/jdpGYaDv8A9fYZPjqtrMXcDAAA=" | base64 -d | gunzip > /var/packages/VideoStation/target/bin/ffmpeg
exit

# 更新ffprobe vainfo
sudo ln -s /var/packages/ffmpeg/target/bin/ffprobe /var/packages/VideoStation/target/bin/ffprobe
sudo ln -s /var/packages/ffmpeg/target/bin/vainfo /var/packages/VideoStation/target/bin/vainfo

# 解除对EAC3 DTS TrueHD的屏蔽
sudo sed -i'-BACKUP' -e 's/eac3/ZAAP/' -e 's/dts/ZAP/' -e 's/truehd/ZAPZAP/' /var/packages/VideoStation/target/lib/libsynovte.so

# 调整权限信息
sudo chmod +x /var/packages/VideoStation/target/bin/ffmpeg
sudo chmod +s /var/packages/VideoStation/target/bin/ffmpeg
sudo chown root:VideoStation /var/packages/VideoStation/target/bin/ffmpeg

测试

这里有两个视频文件,分别时EAC3和DTS格式的视频文件,可以在DSM的FileStation中右击播放,查看是否成功。
EAC3:https://gofile.me/51V3S/WbIDHIvUU
DTS:https://gofile.me/51V3S/xp1jYf0W2

关于调试

通过脚本可知,本程序会将ffmpeg的日志输出到/tmp/ffmpeg.log文件中,有需要的可以查看。

附录:ffmpeg脚本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash

bin="exec /var/packages/ffmpeg/target/bin/ffmpeg"

# DEBUG
echo "$@" >> /tmp/ffmpeg.log

args=()
while [[ $# -gt 0 ]]
do
case "$1" in
-vprofile)
shift
args+=("-x264profile" "$1")
;;
-vf)
shift
#vf=$(echo "$1" | sed -e 's/format=nv12.*scale_vaapi/scale_vaapi/g' -e 's/$/:format=nv12/')
# DEBUG
vf=$(echo "$1" | tee -a /tmp/ffmpeg.log | sed -e 's/format=nv12.*scale_vaapi/scale_vaapi/g' -e 's/$/:format=nv12/
')
echo "vf: [$vf]" >> /tmp/ffmpeg.log
args+=("-vf" "$vf")
;;
-i)
shift
movie="$1"
args+=("-i" "$1")
# DEBUG
echo "movie=[$movie]" >> /tmp/ffmpeg.log
;;
*)
args+=("$1")
;;
esac
shift
done

set -- "${args[@]}"

# DEBUG
echo $bin "$@" >> /tmp/ffmpeg.log
echo >> /tmp/ffmpeg.log
$bin "$@" 2>>/tmp/ffmpeg.log

#$bin "$@"