最近想学习后端,又不想花钱,怎么办呢?于是在手机端B站(哔哩哔哩)上面找到了满意的免费视频教程,但是手机端看起来很不方便啊。于是,我通过在手机端缓存下来后,导入到了电脑端,但是我后面了发现两个问题:

1.本来一集视频按理说一段吧,但是B站下载下来的视频并不是完整的一段,而是被分成了多段blv格式的视频,所以需要想办法把它们拼接成完整的一段视频!

2.视频数量太大,不可能一个一个去修改,得想办法批量处理!(我这里有120个视频文件夹,下图所示,没显示完)

基于上述两个问题,必须用一种方法快速解决!网上百度查了一些资料,觉得可行性很大,于是准备自己动手写代码来实现这一功能。人生苦短,我学Python!哈哈,就是Python没错了,话不多说,直接上自己用python写的批量合并并转换B站视频格式的源代码:

#批量合并特定文件夹下的视频文件,然后输出到指定文件夹下#主要是需要moviepy这个库

from moviepy.editor import *

importosfrom natsort importnatsortedimportjson#psutil是一个跨平台库能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系统.

importpsutil#杀死moviepy产生的特定进程

defkillProcess():#处理python程序在运行中出现的异常和错误

try:#pids方法查看系统全部进程

pids =psutil.pids()for pid inpids:#Process方法查看单个进程

p =psutil.Process(pid)#print('pid-%s,pname-%s' % (pid, p.name()))

#进程名

if p.name() == 'ffmpeg-win64-v4.1.exe':#关闭任务 /f是强制执行,/im对应程序名

cmd = 'taskkill /f /im ffmpeg-win64-v4.1.exe 2>nul 1>null'

#python调用Shell脚本执行cmd命令

os.system(cmd)except:pass

if __name__ == '__main__':#循环体

for i in range(120):#提取对应视频标题的json文件路径

myjsondirs = './video/{}/entry.json'.format(i + 1)#定义拼接完成后视频的标题

vdtitle = ''with open(myjsondirs,'r', encoding='UTF-8') as load_f:#loads方法将json格式数据转换为字典(读取文本用此法)

load_dict =json.load(load_f)

vdtitle= load_dict['page_data']['part']#视频文件夹路径

mydirs = './video/{}/lua.flv.bili2api.80'.format(i+1)#定义拼接视频的数组

L =[]#访问 video 文件夹

#root指的是当前正在遍历的这个文件夹的本身的地址,dirs是一个 list,内容是该文件夹中所有的目录的名字(不包括子目录),files同样是 list,内容是该文件夹中所有的文件(不包括子目录)

for root, dirs, files inos.walk(mydirs):#按文件名排序

#files.sort()

#自然排序法

files =natsorted(files)#print(files)

#遍历所有文件

for file infiles:#os.path.splitext(“文件路径”) 分离文件名与扩展名:默认返回(fname, fextension)元组,可做分片操作

#如果后缀名为 .blv

if os.path.splitext(file)[1] == '.blv':#.blv格式视频的完整路径

filePath =os.path.join(root, file)#读取视频到内存

myvideo =VideoFileClip(filePath)#添加到数组

L.append(myvideo)#对多个视频在时长上进行拼接

final_clip =concatenate_videoclips(L)

targetdir= './target/{}.mp4'.format(vdtitle)#法一:生成目标视频文件方法

#final_clip.to_videofile(targetdir, fps=24)

#法二:最常规的生成目标视频文件方法

final_clip.write_videofile(targetdir,fps=24, remove_temp=True) #remove_temp=True表示生成的音频文件是临时存放的,视频生成后,音频文件会自动处理掉!若为False表示,音频文件会同时生成!

print("{}---{}---拼接成功!".format(i + 1, vdtitle))

killProcess()

注意:因为moviepy拼接视频特别慢,自己电脑配置也不行,要把120个文件夹下的视频拼接完成需要很多时间!

经过一晚的运行,顺利合并了成了120个视频,结果如下:

总的来说合并后的视频,画质还是不错的!

过程中遇到的一些问题:

其实我个人觉得写代码,遇到问题才是最有意思的,当把这一个一个的问题都解决掉,这种感觉才是真的nice!显然我自己在处理合并B站视频时遇到了一些问题,这里记录下来,方便自己也方便他人查阅学习!

问题1:真正拼接视频时,发现会报错 OSError: [WinError 6] 句柄无效!

解决办法:调用自定义函数killProcess()杀死moviepy产生的特定进程!

原因:这是因为调用了moviepy的concatenate_videoclips函数,没有及时杀死进程!如果不加杀死进程的程序,循环一次,在任务管理器就会新产生一个ffmpeg-win64-v4.1.exe的进程,这个进程数量过多,windows任务管理器并不会自动杀死这些进程,而运行的python程序就会报错!所以我在程序里添加了杀死ffmpeg-win64-v4.1.exe进程的程序,这样拼接完成一个视频,就调用函数强行杀死ffmpeg-win64-v4.1.exe进程,保证pycharm里面的ffmpeg-win64-v4.1.exe进程不会无限增长下去导致程序报错!

问题2:报错 psutil._exceptions.NoSuchProcess: psutil.NoSuchProcess no process found with pid 5764

解决办法:添加try...except处理,使python程序能够处理在运行中出现的异常和错误。

原因:没有发现指定的进程引起的程序报错!

注意:命令 cmd = 'taskkill /f /im ffmpeg-win64-v4.1.exe 2>nul 1>null',这里的2>nul:表示不输出错误信息   1>nul:表示不输出成功的信息

--------------------喜欢就点个赞呗,嘻嘻嘻----------------------

python合并视频和音频_Python批量合并处理B站视频相关推荐

  1. python合并视频和音频_FFMpeg无损合并视频的多种方法 python | 猴头客

    方法二确实可行 方法1 我试着不行 需要的话自己试试把 python 的调用cmd命令是这么写的 res=os.system("ifconfig"); 众所周知,从某些视频网站下载 ...

  2. 有哪些免费视频转音频的软件?这有支持视频转音频的软件

    你知道免费视频转音频的软件有哪些吗?Premiere Pro.视频转文字助手和图库是三款常用的视频编辑软件. 它们都提供了视频转音频的功能,使用户可以将视频中的音频提取出来,以便后续处理或使用. 软件 ...

  3. Python爬虫学习基础——5分钟学会爬取B站视频日播放量排行

    Python爬虫学习基础--5分钟学会爬取B站视频日播放量排行 基础包含 requests pyquery 进入正题 基础包含 这也是我当初第一次学习爬虫时做的练习,感觉给初学者练笔挺不错的.运用的知 ...

  4. 干货分享:高效办公工具【视频转文字、视频播放器、B站视频下载软件、贴图、截图提取文字并翻译、笔记记录软件、任务管理网站】

    高效办公工具分享--视频转文字.视频播放器.B站视频下载软件.贴图.截图提取文字并翻译.笔记记录软件.任务管理网站 一 前言 二.下载链接及效果 1.视频自动转文字-飞书妙记(目前免费使用!!) 2. ...

  5. python合并视频和音频_Python做图像处理及视频音频文件分离和合成功能

    一.简介 Imageio是一个Python库,提供了一个简单的界面来读取和写入各种图像数据,包括动画图像,视频,体积数据和科学格式.它是跨平台的,运行在Python 2.7和3.4+上,易于安装. 作 ...

  6. python批量合并单元格_Python批量合并有合并单元格的Excel文件详解

    合并单元格 合并单元格相信大家都会,比如下面这段简单的代码就可以实现: app='Word' word=win32.gencache.EnsureDispatch('%s.Application' % ...

  7. python自动办公 pdf_Python办公自动化|批量合并PDF,拿来就用

    系列导读 Python办公自动化|从Word到Excel​mp.weixin.qq.comPython办公自动化|从Excel到Word​mp.weixin.qq.com 大家好,今天分享一个实用的办 ...

  8. python视频编辑教程_Python 带你高效创作短视频,视频剪辑什么鬼_Python 视频_Python 课程视频_Python 课程_课课家...

    近两年,抖音.快手将短视频推到风口浪尖上,要生产出高质量的视频,离不开视频剪辑这一环节;在全民剪片浪潮中,大众使用最多的剪辑软件如:Pr.FCPX.剪印.Vue 等.我们一起看看. 之前有两篇文章分别 ...

  9. python 视频转场_Python 带你高效创作短视频

    1.提取背景音乐和修改音量 先从抖音上下载视频文件,然后利用 moviepy 依赖库提取到背景音乐. def get_audio_from_video(video_path): "" ...

  10. wps合并所有sheet页_Python一键合并上千个Excel表,一天的工作量一小时搞定!下班...

    一.老板的需求总是莫名奇妙 老板需求:一天老板说,嘿!放牛娃,将这些excel表合并到一个总表里,下班前交给我 老板话刚讲完,我心里就想,这还不简单么,excel不就是有合并表的功能么!!简单的要死! ...

最新文章

  1. 机器学习基础专题:线性回归
  2. 802.11协议中的action帧的使用
  3. access2013数据库实验笔记_医学科研实验基础知识笔记(十):甲基化
  4. 博客系统。集成调试平台,支持类结构/jar结构预览、支持方法调试和监听、支持修改类字段(变量、常量、枚举)等
  5. linux网络流量实时监控工具之iptraf 【个人比较喜欢用的流量监控软件】
  6. could not stop cortex-m device 问题
  7. Python3初级知识整理
  8. IFIX组态软件WINCC INTOUCH数据库 日志SQL记录,时班日报神器
  9. 微信表白神秘代码!快发给ta!
  10. HDOJ2067_小兔的棋盘(卡塔兰数)
  11. 巨头围剿、极兔狂奔:它离拼多多还有多远?
  12. Linux硬盘格式化
  13. 人工智能的应用无人驾驶技术
  14. 可靠数据传输(RDT)的原理
  15. 支付宝服务商模式支付
  16. sklearn.neighbors 最近邻相关算法,最近邻分类和回归
  17. n叉树的遍历递归实现
  18. Fibonacci 数列和 Lucas 数列的性质、推论及其证明
  19. 迷失轨迹官网android,迷失轨迹lost tracks
  20. 常见的web安全问题有哪些

热门文章

  1. Matlab实现常见的插值算法
  2. android+反编译加广告,追书神器Android版,反编译去广告基本教程
  3. 最常用的scrum工具、敏捷开发工具、看板工具
  4. 2021互联网大厂中秋礼盒大盘点
  5. eclipse之 Type Hierachy:Viewing the type hierarchy
  6. 51个 Scratch 趣味小游戏(源码)
  7. Toshiba e-STUDIO5616AC 一体机驱动
  8. 直通车内测“定时上架”功能,商家可以提前锁定爆款了!
  9. PLM系统应包括什么
  10. Photoshop 2021下载链接 百度网盘