群晖(Synology)video Station索引无视频缩略图

一、个人环境

黑群晖DSM6.1.4

二、解决方式

1、参考上文,下载新版本ffmpeg

https://www.cnblogs.com/hester/p/14696235.html

2、编写python脚本,调用ffmpeg截取视频图像

三、解决步骤

目前群晖DSM自带的ffmpeg版本是 2.7.1 ,通过社区第三方安装 4.2.4 版本的ffmpeg,Photo Station索引后,可以生成视频缩略图;但Video Station索引后,仍然无法生成视频缩略图。

个人的解决方式为编写python转换脚本

1、下载新版ffmpeg

如何下载、安装,请参考:https://www.cnblogs.com/hester/p/14696235.html

2、编写python转换脚本

创建脚本文件photo_thumb.py

#!/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)

 也可参考如下链接,直接下载

链接:https://pan.baidu.com/s/1iHW_3GvutSz6d_KPeyxvlA
提取码:3uok

3、上传至群辉共享文件夹

  • 打开File Station,上传脚本文件photo_thumb.py至需要转换的文件夹,如video

  • 脚本执行时,会自动遍历子文件夹,所以只需在最外层文件夹执行即可

4、进入步骤3中video文件夹,运行脚本

ssh登录群辉,如何设置、登录,请参考https://www.cnblogs.com/hester/p/14696235.html

ssh命令行窗口运行如下命令

cd /
cd volume1/video/
sudo python3 photo_thumb.py 

注:如上脚本采用python3执行,python2未实验

 

posted @ 2021-04-24 10:50  “人生苦短”  阅读(11560)  评论(1编辑  收藏  举报