MoneyPrinterTurbo icon indicating copy to clipboard operation
MoneyPrinterTurbo copied to clipboard

建议选取视频时,排除已经下载过的视频

Open jerryblues opened this issue 2 months ago • 6 comments

现在稍微长一点的视频中,视频里经常出现相同的视频片段, 建议取视频时,排除已经下载过的视频, 谢谢~

jerryblues avatar Apr 02 '24 08:04 jerryblues

长视频还要优化一下,你可以把项目目录下面的 script.json 文件上传到这里么? 我也调试一下

harry0703 avatar Apr 02 '24 10:04 harry0703

长视频还要优化一下,你可以把项目目录下面的 script.json 文件上传到这里么? 我也调试一下

script.json

上传啦

jerryblues avatar Apr 03 '24 01:04 jerryblues

这个是个好问题, 我已经稍微修改了源码,实现了吧下载的视频存放到一个共同的目录下, 下载前先判断有没有本地存在该视频,没有缓存在下载。

  1. 需要创建一个目录 v_dir="/sdb/github/MoneyPrinterTurbo/storage/tasks/video"
  2. app/services/material.py 的save_video函数更新如下
  3. 重新启动webui.sh程序
  4. 测试是否ok

def save_video(video_url: str, save_dir: str) -> str: # 解析URL,得到路径部分 parsed_url = urlparse(video_url) path = parsed_url.path # 从路径中提取文件名 filename = os.path.basename(path) # 文件名即为所需的 video_id video_id = filename #video_id = f"vid-{str(int(time.time() * 1000))}" v_dir="/sdb/github/MoneyPrinterTurbo/storage/tasks/video" video_path = f"{v_dir}/{video_id}" #video_path = f"{save_dir}/{video_id}.mp4" proxies = config.pexels.get("proxies", None) # 检查 video_path 是否存在 if os.path.exists(video_path): print("该文件已经存在。") else: # 如果文件不存在,执行请求,下载并保存 with open(video_path, "wb") as f: # 禁用安全请求警告 requests.packages.urllib3.disable_warnings() # 请求视频内容 response = requests.get(video_url, proxies=proxies, verify=False, timeout=(10, 180)) # 写入文件 f.write(response.content) print(f"文件已保存到 {video_path}")

return video_path

shanghailiwei avatar Apr 05 '24 01:04 shanghailiwei

以下面的带有语法的为准。

def save_video(video_url: str, save_dir: str) -> str:
    # 解析URL,得到路径部分
    parsed_url = urlparse(video_url)
    path = parsed_url.path
    # 从路径中提取文件名
    filename = os.path.basename(path)
    # 文件名即为所需的 video_id
    video_id = filename
    #video_id = f"vid-{str(int(time.time() * 1000))}"
    v_dir="/sdb/github/MoneyPrinterTurbo/storage/tasks/video"
    video_path = f"{v_dir}/{video_id}"
    #video_path = f"{save_dir}/{video_id}.mp4"
    proxies = config.pexels.get("proxies", None)
    # 检查 video_path 是否存在
    if os.path.exists(video_path):
        print("该文件已经存在。")
    else:
        # 如果文件不存在,执行请求,下载并保存
        with open(video_path, "wb") as f:
             # 禁用安全请求警告
            requests.packages.urllib3.disable_warnings()
             # 请求视频内容
            response = requests.get(video_url, proxies=proxies, verify=False, timeout=(10, 180))
             # 写入文件
            f.write(response.content)
        print(f"文件已保存到 {video_path}")

    return video_path

shanghailiwei avatar Apr 05 '24 01:04 shanghailiwei

@shanghailiwei 非常不错,我合到代码里面去 👍

harry0703 avatar Apr 05 '24 01:04 harry0703

@shanghailiwei 已加入该逻辑,感谢建议,有问题欢迎反馈 增加了配置项,这样更灵活一些

[app]
    # 视频素材存放位置
    # material_directory = ""                    #表示将视频素材下载到默认的文件夹,默认文件夹为当前项目下的 ./storage/cache_videos
    # material_directory = "/user/harry/videos"  #表示将视频素材下载到指定的文件夹中
    # material_directory = "task"                #表示将视频素材下载到当前任务的文件夹中,这种方式无法共享已经下载的视频素材

    material_directory = ""

harry0703 avatar Apr 05 '24 03:04 harry0703