利用python+ffmpeg合并B站视频及格式转换的实例代码


Posted in Python onNovember 24, 2020

利用python+ffmpeg合并B站视频及格式转换 B站客户端下载的视频一般有两种格式:早期的多为blv格式(由flv格式转换而来,音视频轨道在同一文件下)。

如今的多为m4s格式,音频轨视频轨分开 以下为利用ffmpeg简单对文件处理,使其转换为大多数播放器能正常播放的mp4格式 前提:已正常安装ffmpeg

import tkinter as tk
from tkinter import filedialog
import os
import tkinter.messagebox
from tkinter import ttk
mainGUI=tk.Tk()
width = 400
height = 400
screenwidth = mainGUI.winfo_screenwidth()
screenheight = mainGUI.winfo_screenheight()
alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
mainGUI.geometry(alignstr)
mainGUI.title("转码系统")
def browseDialog():
 root = tk.Tk()
 root.withdraw()
 return filedialog.askopenfilename()
def browseDialogTo():
 path=browseDialog()
 var.set(path)
def browseDialogTo2():
 path=browseDialog()
 var2.set(path)
def browseDialogTof2():
 path=browseDialog()
 varf2.set(path)
def browseDialogTof3():
 path=browseDialog()
 varf3.set(path)
def browseDialogTof4():
 path=browseDialog()
 varf4.set(path)

tab = ttk.Notebook(mainGUI)

frame0 = tk.Frame(tab)
tab6 = tab.add(frame0, text = "m4s转mp4")

frame1 = tk.Frame(tab)
tab1 = tab.add(frame1, text = "blv,flv转mp4")

frame2 = tk.Frame(tab)
tab2 = tab.add(frame2, text = "提取音频")

frame3 = tk.Frame(tab)
tab3 = tab.add(frame3, text = "音频截取")

tab.pack(expand = True, fill = tk.BOTH)

#----------------------------------------------------------------------------------------------#
l1=tk.Label(frame0,text = "请选择视频文件",font=('Arial', 15),width=100,height=2)
l1.pack()
var=tk.StringVar()
var.set("")
e1 = tk.Entry(frame0,textvariable = var, show = None)#显示成明文形式
e1.pack()
b1=tk.Button(frame0, text='浏览', width=6,
     height=2, command=browseDialogTo)
b1.pack()

l2=tk.Label(frame0,text = "请选择音频文件",font=('Arial', 15),width=100,height=2)
l2.pack()
var2=tk.StringVar()
var2.set("")
e2 = tk.Entry(frame0,textvariable = var2, show = None)#显示成明文形式
e2.pack()
b2=tk.Button(frame0, text='浏览', width=6,
     height=2, command=browseDialogTo2)
b2.pack()

l3=tk.Label(frame0,text = "请输入新文件命名",font=('Arial', 15),width=100,height=2)
l3.pack()
e3 = tk.Entry(frame0, show = None)#显示成明文形式
e3.pack()

def myCMD(path1,path2,name):
 ver=os.popen("FFmpeg -i "+path1+" -i "+path2+" -codec copy "+"C:\\Users\\renboyu010214\\Desktop\\outputFile\\"+name+".mp4")
 ver.close()
def myCMDmain():
 path1=e1.get()
 path2=e2.get()
 name=e3.get()
 myCMD(path1,path2,name)
 tkinter.messagebox.showinfo(title='success', message="转码成功!")
b4=tk.Button(frame0, text='确定', width=6,
     height=2, command=myCMDmain)
b4.pack()
#----------------------------------------------------------------------------------------------#
lf2=tk.Label(frame1,text = "请选择blv或flv文件",font=('Arial', 15),width=100,height=2)
lf2.pack()
varf2=tk.StringVar()
varf2.set("")
ef2 = tk.Entry(frame1,textvariable = varf2, show = None)#显示成明文形式
ef2.pack()
bf2=tk.Button(frame1, text='浏览', width=6,
     height=2, command=browseDialogTof2)
bf2.pack()
lf2_1=tk.Label(frame1,text = "请输入新文件命名",font=('Arial', 15),width=100,height=2)
lf2_1.pack()
ef2_1 = tk.Entry(frame1, show = None)#显示成明文形式
ef2_1.pack()
def myCMDmainf2():
 path1=ef2.get()
 name=ef2_1.get()
 ver=os.popen("ffmpeg -i "+path1+" "+"C:\\Users\\renboyu010214\\Desktop\\outputFile\\"+name+".mp4")
 ver.close()
 tkinter.messagebox.showinfo(title='success', message="转码成功!")
bf2=tk.Button(frame1, text='确定', width=6,
     height=2, command=myCMDmainf2)

bf2.pack()

#----------------------------------------------------------------------------------------------#
lf3=tk.Label(frame2,text = "请选择视频文件",font=('Arial', 15),width=100,height=2)
lf3.pack()
varf3=tk.StringVar()
varf3.set("")
ef3 = tk.Entry(frame2,textvariable = varf3, show = None)#显示成明文形式
ef3.pack()
bf3=tk.Button(frame2, text='浏览', width=6,
     height=2, command=browseDialogTof3)######
bf3.pack()
lf3_1=tk.Label(frame2,text = "请输入新文件命名",font=('Arial', 15),width=100,height=2)
lf3_1.pack()
ef3_1 = tk.Entry(frame2, show = None)#显示成明文形式
ef3_1.pack()
def myCMDmainf3():
 path1=ef3.get()
 name=ef3_1.get()
 ver=os.popen("ffmpeg -i "+path1+" -acodec copy -vn "+"C:\\Users\\renboyu010214\\Desktop\\outputFile\\"+name+".aac") 
 #ffmpeg -i F:\video\冠世一战.mp4 -acodec copy -vn F:\video\output.aac
 ver.close()
 tkinter.messagebox.showinfo(title='success', message="音频提取成功!")
bf3=tk.Button(frame2, text='确定', width=6,
     height=2, command=myCMDmainf3)

bf3.pack()

#----------------------------------------------------------------------------------------------#

#----------------------------------------------------------------------------------------------#
lf4=tk.Label(frame3,text = "请选择音频/视频文件",font=('Arial', 15),width=100,height=2)
lf4.pack()
varf4=tk.StringVar()
varf4.set("")
ef4 = tk.Entry(frame3,textvariable = varf4, show = None)#显示成明文形式
ef4.pack()
bf4=tk.Button(frame3, text='浏览', width=6,
     height=2, command=browseDialogTof4)######
bf4.pack()
lf4_1=tk.Label(frame3,text = "请输入新文件命名(音频后缀.mp3 视频后缀.mp4)",font=('Arial', 15),width=100,height=2)
lf4_1.pack()
ef4_1 = tk.Entry(frame3, show = None)#显示成明文形式
ef4_1.pack()
lf4_2=tk.Label(frame3,text = "请输入开始时间(xx:xx:xx)",font=('Arial', 15),width=100,height=2)
lf4_2.pack()
ef4_2 = tk.Entry(frame3, show = None)#显示成明文形式
ef4_2.pack()
lf4_3=tk.Label(frame3,text = "请输入截取时间(xx:xx:xx)",font=('Arial', 15),width=100,height=2)
lf4_3.pack()
ef4_3 = tk.Entry(frame3, show = None)#显示成明文形式
ef4_3.pack()
def myCMDmainf4():
 path1=ef4.get()
 name=ef4_1.get()
 startTime=ef4_2.get()
 time=ef4_3.get()
 ver=os.popen("ffmpeg -ss "+startTime+" -t "+time+" -i "+path1+" -vcodec copy -acodec copy "+"C:\\Users\\renboyu010214\\Desktop\\outputFile\\"+name) 
 #ffmpeg -ss 00:00:00 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4 
 ver.close()
 tkinter.messagebox.showinfo(title='success', message="音频/视频截取成功!")
bf4=tk.Button(frame3, text='确定', width=6,
     height=2, command=myCMDmainf4)

bf4.pack()

#----------------------------------------------------------------------------------------------#

mainGUI.mainloop()

到此这篇关于利用python+ffmpeg合并B站视频及格式转换的实例代码的文章就介绍到这了,更多相关python+ffmpeg合并B站视频及格式转换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python判断变量是否已经定义的方法
Aug 18 Python
通过数据库向Django模型添加字段的示例
Jul 21 Python
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
python中的文件打开与关闭操作命令介绍
Apr 26 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 Python
python中列表的切片与修改知识点总结
Jul 23 Python
简单了解python变量的作用域
Jul 30 Python
Python绘制股票移动均线的实例
Aug 24 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
python绘制分布折线图的示例
Sep 24 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 Python
python 如何停止一个死循环的线程
Nov 24 #Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 #Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 #Python
Python调用Redis的示例代码
Nov 24 #Python
基于django和dropzone.js实现上传文件
Nov 24 #Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 #Python
Django web自定义通用权限控制实现方法
Nov 24 #Python
You might like
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
js实现导航跟随效果
2018/11/17 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
Python二分查找详解
2015/09/13 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
Python分类测试代码实例汇总
2020/07/23 Python
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
英语故事演讲稿
2014/04/29 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python
python基于turtle绘制几何图形
2021/06/15 Python
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle