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

查看 108|回复 7
作者:virtualspider   
来吾爱很久了,今天忽然写了点东西,就分享给大家,也算是潜水这么久做的一个贡献吧网上看到一个油猴脚本,可以自动下载任何视频,下载后自动生成音频和视频,需要用到ffmpeg对音视频进行合成,于是花了几个小时写了一个python脚本,实现自动扫描并合成视频功能
使用此脚本前,您可能需要配置如下清单
  • 安装油猴脚本
  • 安装无限制下载视频脚本:https://greasyfork.org/zh-CN/scripts/445751-unlimited-downloader
  • 下载ffmpeg音视频合成工具
  • 配置下载目录和ffmpeg目录,分别是脚本中的两个变量:download_dir,ffmpeg_dir

    完成上述配置后,即可享受无限制的视频下载及合成
    [Python] 纯文本查看 复制代码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 = {}
        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[5:]
                        if key1 in dict1:
                            dict2 = dict1[key1]
                        else:
                            dict2 = {}
                        dict2['audio'] = os.path.join(path, rename)
                        dict1[key1] = dict2
                    if rename.startswith('video'):
                        key1 = rename[5:]
                        if key1 in dict1:
                            dict2 = dict1[key1]
                        else:
                            dict2 = {}
                        dict2['video'] = os.path.join(path, rename)
                        dict1[key1] = dict2
        return dict1


    def synthetic_video(dict1):
        for key in dict1:
            dict2 = dict1[key]
            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()

    脚本, 音视频

  • uzcool   

    我也贴一个 自己修改的批处理吧 ..
    需要和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   

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

    先收藏,
    dzs10006   

    感谢分享
    你是我的人   

    感谢分享
    山岚   


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

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


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

    大佬,程序运行出现中文乱码
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部