«

利用第三方解码器FFMPEG让(黑)群晖DSM7.X 破解Advanced Media Extensions实现视频缩略图功能

学长 发布于 阅读:3993 NAS


方法参考自

https://wp.gxnas.com/11491.html

https://sspai.com/post/66142

但是随着软件跟新目录有所变更


其实群晖自己的解码器也是用特殊编辑的ffmpeg来限制支持的编码,所以说未来只要ffmpeg能硬解谁还需要洗白的群晖呢?


去套件中心安装 

Advanced Media Extensions

Video Station

Video Station(VS)需要去设置关闭硬解,只要芯片强软硬有毛区别呢,当然会影响网上那些卖二手硬件的,毕竟J3455能卖到4000+呢

然后去套件中心停用VideoStation


目前使用的版本是 Advanced Media Extensions 3.0.1-2004 (AME)和 Video Station 3.0.5-2503


添加社群源

packages.synocommunity.com

安装FFMPEG


打开ssh,用管理源账号登录,切成 root,反正我的没法直接用 root 登录


sudo -i



备份 VS 自带的ffmpeg


mv -n /var/packages/VideoStation/target/bin/ffmpeg /var/packages/VideoStation/target/bin/ffmpeg-bak
cp -n /var/packages/VideoStation/target/lib/libsynovte.so /var/packages/VideoStation/target/lib/libsynovte.so.bak
chown VideoStation:VideoStation /var/packages/VideoStation/target/lib/libsynovte.so.bak


拥有者很重要,不然有可能导致以后恢复无法运行,-bak主要解决.bak部分编码仍旧使用自带的编码器,我是没经历过,gxnass这么说的


重新生成个ffmpeg:

echo "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" | base64 -d | gunzip > /var/packages/VideoStation/target/bin/ffmpeg


直接替换就可以

cp /var/packages/ffmpeg/target/bin/ffmpeg /var/packages/VideoStation/target/bin/

也可以cd 去 /volume1/\@appstore 复制


改权限:


chown root:VideoStation /var/packages/VideoStation/target/bin/ffmpeg
chmod 750 /var/packages/VideoStation/target/bin/ffmpeg
chmod u+s /var/packages/VideoStation/target/bin/ffmpeg


给Video Station添加 DTS、EAC3、TrueHD支持:


sed -i -e 's/eac3/3cae/' -e 's/dts/std/' -e 's/truehd/dheurt/' /var/packages/VideoStation/target/lib/libsynovte.so


sed -i -e 's/eac3/3cae/' -e 's/dts/std/' -e 's/truehd/dheurt/' -e 's/h264/462h/' -e 's/hevc/cveh/' /var/packages/VideoStation/target/lib/libsynovte.so


把h264 hevc加上,不屏蔽缩略图会因为没打开核显不生成

需要给 控制面板--共享文件夹--权限--系统内部帐号 sc-ffmpeg 读写权限

cp的是root的权限软连接需要给应用账号权限


我也不知道为什么用用base64把压缩文件重新写入遍。。。总之别人这么做我也这么做

下面就是破解AME的过程了AME的编码器你没输入license是不会解压(下载)到指定正确位置的,那我直接用编译过的ffmpeg编码器替代好了,第一个这么做的肯定不是我,毕竟DSM6就有人这么干了。AME的编码是链接到这个位置的直接创建


mkdir /var/packages/CodecPack/target/pack
mkdir /var/packages/CodecPack/target/pack/bin


然后复制VS的编码器到AME


cp /var/packages/VideoStation/target/bin/ffmpeg /var/packages/CodecPack/target/pack/bin/ffmpeg41
cp /var/packages/VideoStation/target/bin/ffmpeg /var/packages/CodecPack/target/pack/bin/ffmpeg33-for-audio
cp /var/packages/VideoStation/target/bin/ffmpeg /var/packages/CodecPack/target/pack/bin/ffmpeg33-for-surveillance
chown -R CodecPack:CodecPack /var/packages/CodecPack/target/pack

然后就可以去开启VS了


所以最好的转码办法还是直接用nv显卡通过ffmpeg批量转换成能网络播放器的流媒体文件,为啥把这些格式取消了?因为就算买企业级的NAS用的啥cpu啥gpu群晖自己还是有B数的

======================================================================================

缩略图上述方法缩略图还是不能支持, https://zhuanlan.zhihu.com/p/379627572


需要复制覆盖掉/usr/bin里面的ffmpeg

cp /volume1/\@appstore/ffmpeg/bin/ffmpeg /usr/bin


修改完重新生成索引--控制面板--媒体索引--重新索引

photo目前7.1.1测试没问题

vs不知道怎么的有些生成了有些没生成


时间长短看你CPU速度了,毕竟。。。没GPU支持


python

https://blog.51cto.com/u_15162069/2913246

网上py自动生成那个,只是生成跟视频文件名一样的图片,VS不会自动识别成视频封面的,这个尝试过了,如果你想尝试可以放弃了

不需要sudo


#!/usr/bin/python
# -*- coding:UTF-8 -*-
import os
import sys


def check_type(filename,video_list):
    """
    检查是否为视频文件
    """
    array = map(filename.endswith,video_list)
    if True in array:
        return True
    else:
        return False


def get_capture_delay_time(file_path):
    """
    获取截取图片在视频中位置
    """
    if not os.path.exists(file_path):
        return False
    file_size = os.path.getsize(file_path)
    if file_size <= 1 * 1024 * 1024:                                # 视频大小 <= 1MB,截取视频第1S图片
        delay_time = 1
    elif file_size <= 4 * 1024 * 1024:                              # 1MB < 视频大小 <= 4MB,截取视频第5S图片
        delay_time = 5
    elif file_size <= 50 * 1024 * 1024:                             # 4MB < 视频大小 <= 50MB,截取视频第10S图片
        delay_time = 10
    else:
        delay_time = 20                                             # 50MB < 视频大小,截取视频第20S图片
    return delay_time


def check_file_existed(file_path):
    """
    检查文件是否存在
    """
    if os.path.exists(file_path):
        return True
    else:
        return False


def get_file_pre(file_name):
    """
    获取文件名前缀,如my_video.mp4,返回my_video
    """
    video_name_list = os.path.splitext(file_name)
    if len(video_name_list) == 2:
        video_name_pre = video_name_list[0]
    else:
        video_name_pre = False
    return video_name_pre


def make_thumb(file_path,video_types):
    """
    遍历文件夹,调用ffmpeg截取视频图片
    """
    for dir_path,dir_names,file_names in os.walk(file_path):
        for name in file_names:
            # print("*"*20)
            # print(name)
            if not check_type(name,video_types):                    # 不是视频文件,跳过本地迭代,继续下一次迭代
                print("not video,continue next")
                continue
            video_full_path = os.path.join(dir_path, name)
            video_name_pre = get_file_pre(name)
            if video_name_pre:                                      # 如果缩略图已经存在,跳过本地迭代,继续下一次迭代
                pic_name = '%s%s' % (video_name_pre,'.jpg')
                picture_full_path = os.path.join(dir_path,pic_name)
                ret = check_file_existed(picture_full_path)
                if ret:
                    print("%s existed,continue next" % picture_full_path)
                    continue
                delay_time = get_capture_delay_time(video_full_path)
                if not delay_time:                                  # 获取文件大小失败,跳过本地迭代,继续下一次迭代
                    continue
                shell = 'ffmpeg -i "%s" -y -ss %s -frames:v 1 "%s"' % \
                        (video_full_path, delay_time,picture_full_path)
                # print("#"*20)
                print(shell)
                os.system(shell)
                print("%s capture success" % picture_full_path)


if __name__ == "__main__":
    # 当前路径中执行脚本
    file_path = sys.path[0]
    video_types = ['.mp4','.avi','.wmv','.mkv','.flv']
    make_thumb(file_path,video_types)



保存到thumb.py

复制到视频所在目录


用ssh登录,cd到视频所在目录,有空格特殊字符加''

python thumb.py


去VS设置--高级--视频封面设置 下面的勾选 不需要重置索引封面就生成了

也可以直接 win 下跑python 生成 

推荐阅读:


扫描二维码,在手机上阅读