python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5

相对之前版本更新内容:

※ 根据UP主分类存放导出的视频。

※ 新增一种标题格式

注意:需要安装ffmpeg才可使用
ffmpeg下载地址: https://ffmpeg.zeranoe.com/builds/
ffmpeg安装方法:
解压好下载的压缩包后,再将bin目录加入Path环境变量中 按Win+R 运行 输入cmd 在弹出的框框中输入 ffmpeg ,如果没有出现"既不是内部或外部命令"之类的话就是安装成功了
参考链接: https://www.jb51.net/article/153806.htm
运行截图

工具源码

import os
import json
import random
import time
import requests

# 清除所有空格
def clearSpace(str):
 return str.replace(" ", "").replace(" ", "");

# 获取指定Uid的Up主名
def getUpNameByUid(uid):
 try:
 url = 'https://space.bilibili.com/' + str(uid)
 html = requests.get(url)
 html.encoding = 'UTF-8'
 html = html.text
 index1 = html.find("<title>") + len("<title>")
 index2 = html.find("的个人空间", index1)
 result = html[index1:index2]
 if (result != ""):
  return result
 else:
  return uid
 except Exception:
 return uid

# 获取时间戳
def getTimeStamp():
 t = time.localtime(time.time())
 return str(t.tm_year) + '_' + str(t.tm_mon) + '_' + str(t.tm_mday) + '_' + str(t.tm_hour) + \
  str(t.tm_min) + str(t.tm_sec) + str(random.randint(10, 99))

# 更正文件名
def correctFileName(name):
 n_list = list(name)
 for i in range(0, len(n_list)):
 index = 0
 for i in n_list:
  if (
   i == '\\' or i == '/' or i == ':' or i == '*' or i == '?' or i == '\"' or i == '<' or i == '>' or i == '|'):
  n_list.pop(index)
  index = index + 1
 return ''.join(n_list)

# 读取json文件
def getVideoName(path):
 f = open(path, encoding='utf-8')
 setting = json.load(f)
 try:
 result = setting['page_data']['download_subtitle'] # 注意多重结构的读取语法
 except KeyError:
 try:
  result = setting['title'] + ' 第' + setting['ep']['index'] + '话 ' + setting['ep']['index_title']
 except KeyError:
  try:
  result = setting['title']
  except KeyError:
  result = getTimeStamp()
 return result

def getVideoOwner(path):
 try:
 f = open(path, encoding='utf-8')
 setting = json.load(f)
 return clearSpace(getUpNameByUid(setting['owner_id']))
 except Exception:
 return ""

# 获取文件列表
def getFileList(file_dir):
 # 定义四个列表
 title = []
 owner = []
 videoPath = []
 audioPath = []
 # 遍历文件目录
 for root, dirs, files in os.walk(file_dir):
 if ('entry.json' in files):
  title.append(getVideoName(str(root) + '\\entry.json'))
  owner.append(getVideoOwner(str(root) + '\\entry.json'))
 if ('video.m4s' in files and 'audio.m4s' in files):
  videoPath.append(str(root) + '\\video.m4s')
  audioPath.append(str(root) + '\\audio.m4s')
 if (len(title) < len(videoPath)):
  title.append(getTimeStamp())
 if ('0.blv' in files):
  title.pop()
 return [title, owner, videoPath, audioPath]

# 输出mp4文件
def getMP4(title, owner, video_path, audio_path):
 # 生成输出目录
 if not os.path.exists("./output"):
 os.mkdir("./output")
 # 循环生成MP4文件
 for i in title:
 reName = correctFileName(i)
 # 开始生成MP4文件
 if not os.path.exists("./output/" + reName + ".mp4"):
  # 获取临时文件时间戳
  t_stamp = getTimeStamp()
  # 开始合成
  os.system(
  "ffmpeg -i " + video_path[title.index(i)] + " -i " + audio_path[
   title.index(i)] + " -codec copy ./output/" + t_stamp + ".mp4")
  # 设置所属Up主
  curOwner = owner[title.index(i)]
  if curOwner != "":
  if not os.path.exists("./output/" + curOwner):
   os.mkdir("./output/" + curOwner)
  os.rename("./output/" + t_stamp + ".mp4", "./output/" + curOwner + "/" + reName + ".mp4")
  else:
  # 将临时文件时间戳改为标题名
  os.rename("./output/" + t_stamp + ".mp4", "./output/" + reName + ".mp4")
  print("正在合成...")
  print("标题:" + reName)
  print("UP主:" + curOwner)
  print("视频源:" + video_path[title.index(i)])
  print("音频源:" + audio_path[title.index(i)])
  time.sleep(1)

print("欢迎使用批量合成M4S工具 ver2.5")
fileDir = str(input("请输入含M4S文件的目录:"))
f = getFileList(fileDir)
getMP4(f[0], f[1], f[2], f[3])
print("合成完毕")

已编译好的可执行文件(EXE):

链接: https://pan.baidu.com/s/1bLOg6GGJ5Wp7gcW73sXzvg

提取码: yqvm

到此这篇关于python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5的文章就介绍到这了,更多相关python批量合成bilibili缓存文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python爬虫爬取Bilibili弹幕过程解析

    先来思考一个问题,B站一个视频的弹幕最多会有多少? 比较多的会有2000条吧,这么多数据,B站肯定是不会直接把弹幕和这个视频绑在一起的. 也就是说,有一个视频地址为https://www.bilibili.com/video/av67946325,你如果直接去requests.get这个地址,里面是不会有弹幕的,回想第一篇说到的携程异步加载数据的方式,B站的弹幕也一定是先加载当前视频的界面,然后再异步填充弹幕的. 接下来我们就可以打开火狐浏览器(平常可以火狐谷歌控制台都使用,因为谷歌里面因为插件

  • python中使用you-get库批量在线下载bilibili视频的教程

    此文章描述的是在windows10系统pc端python环境下,利用you-get库来进行bilibili视频批量下载,是在cmd中操作完成,只建议有python环境的用户使用. 1.安装you-get库,此处需要注意的是you-get的安装不可以用conda命令行安装,刚刚一股脑只想着annoconda的conda命令,浪费了很多时间. pip install you-get 2.安装完成以后,就可以进行视频下载啦! you-get -o 本地存储路径 bilibili视频在线网址 以上是单个

  • Python图像处理实现两幅图像合成一幅图像的方法【测试可用】

    本文实例讲述了Python图像处理实现两幅图像合成一幅图像的方法.分享给大家供大家参考,具体如下: 将两幅图像合成一幅图像,是图像处理中常用的一种操作,python图像处理库PIL中提供了多种种将两幅图像合成一幅图像的接口. 下面我们通过不同的方式,将两图合并成一幅图像. 1.使用Image.blend()接口 代码如下: # -*- coding:utf-8 -*- from PIL import Image def blend_two_images(): img1 = Image.open(

  • Python中将两个或多个list合成一个list的方法小结

    python中,list这种数据结构很常用到,如果两个或者多个list结构相同,内容类型相同,我们通常会将两个或者多个list合并成一个,这样我们再循环遍历的时候就可以一次性处理掉了.所以如何将两个或者多个list合并成一个就是我们接下来要讲的内容哦 python合并list 方法1,运算符: list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = list1 + list2 print(list3) 方法2,extend()方法: list1 = [1, 2,

  • 使用python删除nginx缓存文件示例(python文件操作)

    调用时输入参数如:  www.jb51.net/表示删除www.jb51.net首页的缓存, www.jb51.net/test.php就表示删除/test.php的缓存 复制代码 代码如下: #coding=utf8import sys,osimport hashlibif len(sys.argv)<2:    print("你没有输入地址.")    sys.exit()path="/home/cache"#缓存目录md5v = hashlib.md5(

  • Python图像处理之gif动态图的解析与合成操作详解

    本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python来解析和生成gif图像. 一.gif动态图的合成 如下图,是一个gif动态图. gif动态图的解析可以使用PIL图像模块即可,具体代码如下: #-*- coding: UTF-8 -*- import os from PIL import Image def analyseImage(path):

  • python怎么删除缓存文件

    python删除缓存文件的方法: 首先输入"find.-name '__pycache__' -type d -exec rm -rf {} \"命令删除所有子目录: 然后输入"find.-name "*.pyc""命令删除.pyc文件即可. 删除当前目录下的所有__pycache__子目录 find . -name '__pycache__' -type d -exec rm -rf {} \ 删除当前目录下所有.pyc文件 find . -n

  • python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5

    相对之前版本更新内容: ※ 根据UP主分类存放导出的视频. ※ 新增一种标题格式 注意:需要安装ffmpeg才可使用 ffmpeg下载地址: https://ffmpeg.zeranoe.com/builds/ ffmpeg安装方法: 解压好下载的压缩包后,再将bin目录加入Path环境变量中 按Win+R 运行 输入cmd 在弹出的框框中输入 ffmpeg ,如果没有出现"既不是内部或外部命令"之类的话就是安装成功了 参考链接: https://www.jb51.net/articl

  • python 批量下载bilibili视频的gui程序

    运行效果: 完整代码: # !/usr/bin/python # -*- coding:utf-8 -*- # time: 2019/07/02--08:12 __author__ = 'Henry' ''' 项目: B站视频下载 - GUI版本 版本1: 加密API版,不需要加入cookie,直接即可下载1080p视频 20190422 - 增加多P视频单独下载其中一集的功能 20190702 - 增加视频多线程下载 速度大幅提升 20190711 - 增加GUI版本,可视化界面,操作更加友好

  • 教你如何利用Python批量翻译英文Word文档并保留格式

    一.需求描述 手上有大量外文文档(本案例以5份为例,分别命名为 test1.docx test2.docx 以此类推),其中一份如下: 基本需求:「批量将这些文档的内容全部翻译成中文,并转存到新的文件中」,效果如下: 高级需求:基本需求满足的同时,要求 「保留原文档的格式」,效果如下: 二.逻辑梳理 2.1 翻译 API 本需求的核心是翻译,策略是利用网络的翻译 API,这里推荐百度翻译开放平台,不考虑并发数的话可以用标准版,免费使用不限字符量! " 百度翻译开放平台:http://api.fa

  • 如何用python批量发送工资条邮件

    目录 思路: 总结反思: 工资excel表格格式如下所示: 使用python批量给每位员工发送工资条信息,格式如下: 思路: 首先是加载excel,获取当前sheet表格 salay = load_workbook('大唐建设集团-2022年5月工资.xlsx', data_only=True) ws = salay.active 登录所使用的发件邮箱服务器 # 登录邮箱服务器 smtp_obj = smtplib.SMTP_SSL('smtp.qq.com', 465) # smtp_obj.

  • python批量制作雷达图的实现方法

    前言 因为工作需要有时候要画雷达图,但是数据好多组怎么办?不能一个一个点excel去画吧,那么可以利用python进行批量制作,得到样式如下: 首先制作一个演示的excel,评分为excel随机数生成: 1 =INT((RAND()+4)*10)/10 加入标签等得到的excel样式如下(部分,共计32行): 那么接下来就是打开python写码了,本文是基于pycharm进行编写 wb = load_workbook(filename=r'C:\Users\Administrator\Deskt

  • Python批量创建迅雷任务及创建多个文件

    其实不是真的创建了批量任务,而是用python创建一个文本文件,每行一个要下载的链接,然后打开迅雷,复制文本文件的内容,迅雷监测到剪切板变化,弹出下载全部链接的对话框~~ 实际情况是这样的,因为用python分析网页非常,比如下载某页中的全部pdf链接 from __future__ import unicode_literals from bs import BeautifulSoup import requests import codecs r = requests.get('you ur

  • 利用Python批量生成任意尺寸的图片

    实现效果 通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片. 效果如下: 目录结构 实现示例 # -*- coding: utf-8 -*- import threading from PIL import Image image_size = range(1, 1001) def start(): for size in image_size: t = threading.Thread(target=create_image, args=(s

  • 利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)

    前言 本文主要给大家介绍的关于Python批量压缩png的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 1.需求 为什么会有这个需求?是因为游戏的资源大多是png图片,需要压缩,但是有些图片和文件夹里的图片,美术不想压缩,比如一些带透明度的光圈或者游戏的主要元素.所以要过滤下.发现python这个语言比较适合用在这个场景.所以写了点python. 2.源码 import os,sys import os.path rootdir=sys.path[0] #需要过滤的文

  • python批量生成本地ip地址的方法

    本文实例讲述了python批量生成本地ip地址的方法.分享给大家供大家参考.具体分析如下: 这段代码用于在本地计算机上生成本地ip地址绑定到网卡,生成的是一个bat的批处理文件,运行此批处理文件,可以通过ipconfig查看 #!/usr/bin/python2.7 # -*- coding: utf-8 -*- # Filename: AddIPAliases.py import re,sys,socket,struct # 1. 判断IP地址是否合法: 2. 判断用户输入的IP是否在Clas

  • Python批量修改文本文件内容的方法

    Python批量替换文件内容,支持嵌套文件夹 import os path="./" for root,dirs,files in os.walk(path): for name in files: #print name if name.endswith(".html"): #print root,dirs,name filename=root+"/"+name f=open(filename,"r") fileconten

随机推荐