

import os
import subprocess # 进行命令行操作
def merge(inDir, outDir, ffmpeg):
av_list = os.listdir(inDir) # 获取视频列表,视频目录名就是视频的av号
for av in av_list: # 遍历每个视频,
av_dir = inDir + "\" + av # 拼接路径与文件名,得到每个av号的路径
part_list = os.listdir(av_dir) # 分P(part)的视频,每个av号会对应多个视频,在此得到part的列表
for part in part_list: # 遍历视频的每P
part_dir = av_dir + "\" + part
# 在每个part下面,会有一个用数字命名文件夹,一个xml,一个json。猜测数字代表的是视频的清晰度
# 我们的视频在那个用数字命名的文件夹里面
sub_part_list = os.listdir(part_dir) # 得到每P文件夹下的文件目录
for sub_part in sub_part_list: # 遍历每P下的文件
if (sub_part.isdigit()): # 只需要对 以数字命名的文件夹 进行操作
# 在以数字命名的文件夹下面,会有三个文件,其中audio.m4s和video.m4s是我们需要的
# 他们分别是我们下载的视频的 音频和没有声音的视频
# 我们把这两个文件通过ffmpeg混流,就可以还原出之前下载的视频
file_path = part_dir + "\" + sub_part
# file_path即为audio.m4s和video.m4s的路径
command = ffmpeg + """ + file_path + "\audio.m4s" + """ + " -i "
+ """ + file_path + "\video.m4s" + """ + " -acodec copy -vcodec copy "
+ """ + outDir + "\" + av + "→" + part+".mp4""
# 使用命令行进行混流
subprocess.Popen(command, stdout=subprocess.PIPE) # 执行命令
break
def main():
inDir = "D:\wenjian\temp\download" # 视频的总目录,即输入内容。注意双反斜线
outDir = "D:\wenjian\temp\download_res" # 视频的输出目录,转换好的视频会放到这里
# ffmpeg的路径,注意"-i"后面有空格
ffmpeg = "D:\ruanjian2\ffmpeg-2022-08-31-git-319e8a49b5-full_build\bin\ffmpeg.exe -i "
merge(inDir, outDir, ffmpeg)
if __name__ == "__main__":
main()
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 »
批量合并手机上下载的B站视频