virtualspider 发表于 2023-2-11 22:24

利用python自动将下载好的音视频合成

本帖最后由 virtualspider 于 2023-2-12 11:24 编辑

来吾爱很久了,今天忽然写了点东西,就分享给大家,也算是潜水这么久做的一个贡献吧
网上看到一个油猴脚本,可以自动下载任何视频,下载后自动生成音频和视频,需要用到ffmpeg对音视频进行合成,于是花了几个小时写了一个python脚本,实现自动扫描并合成视频功能。
按照如下教程安装配置好后,将脚本放到桌面,配置用python运行,任何时候双击,都可以自动合成视频
使用此脚本前,您可能需要配置如下清单

[*]安装油猴脚本插件:https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=zh-CN
[*]安装无限制下载视频脚本,视频能播放就能下载:https://greasyfork.org/zh-CN/scripts/445751-unlimited-downloader
[*]下载ffmpeg音视频合成工具:https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-5.1.2-full_build.7z
[*]配置下载目录和ffmpeg目录,分别是脚本中的两个变量:download_dir,ffmpeg_dir
[*](可选)安装vedio speed controller插件,作用是加速播放,避免等待:https://chrome.google.com/webstore/detail/video-speed-controller/nffaoalbilbmmfgbnbgppjihopabppdk?hl=zh-CN

完成上述配置后,即可享受无限制的视频下载及合成
import os
import tkinter as tk
import tkinter.messagebox


def alert_success():
    if (tk.messagebox.askquestion(title='提示', message='合并完成,是否打开下载文件夹?') == 'yes'):
      output_dir = r'C:\Users\Administrator\Downloads'
      os.system("explorer.exe %s" % output_dir)


def trim_file(file_name):
    if isinstance(file_name, str):
      if file_name.startswith('audio') or file_name.startswith('video'):
            if ' ' in file_name:
                rename = file_name.replace(' ', '')
                print('清除文件名中的空格', file_name)
                os.rename(download_dir + '\\' + file_name, download_dir + '\\' + rename)
                return rename
    return file_name


def scan_download_dir(download_dir):
    dict1 = {}
    list1 = []
    g = os.walk(download_dir)
    for path, dir_list, file_list in g:
      for file_name in file_list:
            rename = trim_file(file_name)
            if isinstance(rename, str):
                if rename.startswith('audio'):
                  key1 = rename
                  if key1 in dict1:
                        dict2 = dict1
                  else:
                        dict2 = {}
                  dict2['audio'] = os.path.join(path, rename)
                  dict1 = dict2
                if rename.startswith('video'):
                  key1 = rename
                  if key1 in dict1:
                        dict2 = dict1
                  else:
                        dict2 = {}
                  dict2['video'] = os.path.join(path, rename)
                  dict1 = dict2
                if rename.startswith('output'):
                  key1 = rename
                  list1.append(key1)
    if list1:
      print('去掉已经生成过的视频', list1)
      for key in list1:
            if key in dict1:
                del dict1
    return dict1


def synthetic_video(dict1):
    for key in dict1:
      dict2 = dict1
      if isinstance(dict2, dict):
            audio = dict2['audio']
            video = dict2['video']
            output = download_dir + '\\output' + key
            cmd = f'{ffmpeg_dir} -i {video} -i {audio} -c:v copy -c:a aac -strict experimental {output}'
            print('执行脚本', cmd)
            os.system(cmd)


if __name__ == '__main__':
    print('扫描下载文件夹')
    download_dir = r'C:\Users\Administrator\Downloads'
    ffmpeg_dir = r'D:\program\ffmpeg-5.1.2-full_build\bin\ffmpeg'

    dict1 = scan_download_dir(download_dir)
    if dict1:
      print('循环合成文件并输出', dict1)
      synthetic_video(dict1)

      print('弹窗提醒')
      alert_success()


2023-2-12更新:已合成的视频自动跳过

uzcool 发表于 2023-2-12 00:12

本帖最后由 uzcool 于 2023-2-12 00:20 编辑

我也贴一个 自己修改的批处理吧 ..


需要和FFmpeg放在同一个目录.合并完成的文件也在这个目录下..

@echo off
title 无限下载器 音视频合并 20230203

echo.
set /p audio=请将【音频】文件拖拽到此处,按下回车确认:
set /p video=请将【视频】文件拖拽到此处,按下回车确认:
ffmpeg.exe -i %audio% -i %video% -c:v copy -c:a aac -strict experimental output.mp4
echo.
echo 合并结束!
echo 文件已经输出到本地的 output.mp4 文件。
pause



不依赖任何软件 批处理还是好用的..

波仔8 发表于 2023-2-12 00:12

先收藏,后面说不定用得上,可以下视频号的视频吗?

一天一个样 发表于 2023-2-12 00:48

{:1_893:}先收藏,

dzs10006 发表于 2023-2-12 08:29

感谢分享


你是我的人 发表于 2023-2-12 08:51

感谢分享

山岚 发表于 2023-2-12 09:05

波仔8 发表于 2023-2-12 00:12
先收藏,后面说不定用得上,可以下视频号的视频吗?

这是下网页视频的,视频号下载论坛里有别的软件

山岚 发表于 2023-2-12 09:37

uzcool 发表于 2023-2-12 00:12
我也贴一个 自己修改的批处理吧 ..




大佬,程序运行出现中文乱码

山岚 发表于 2023-2-12 10:21

山岚 发表于 2023-2-12 09:37
大佬,程序运行出现中文乱码

已解决,文件保存类型得选ANSI编码

山岚 发表于 2023-2-12 10:36

不知道为啥,合成出来的视频都有杂音{:1_907:}
页: [1] 2 3
查看完整版本: 利用python自动将下载好的音视频合成