利用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: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
不依赖任何软件 批处理还是好用的.. 先收藏,后面说不定用得上,可以下视频号的视频吗? {:1_893:}先收藏, 感谢分享
感谢分享 波仔8 发表于 2023-2-12 00:12
先收藏,后面说不定用得上,可以下视频号的视频吗?
这是下网页视频的,视频号下载论坛里有别的软件 uzcool 发表于 2023-2-12 00:12
我也贴一个 自己修改的批处理吧 ..
大佬,程序运行出现中文乱码 山岚 发表于 2023-2-12 09:37
大佬,程序运行出现中文乱码
已解决,文件保存类型得选ANSI编码 不知道为啥,合成出来的视频都有杂音{:1_907:}