群暉(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未實驗

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM