利用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 相关文章推荐
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
Python if语句知识点用法总结
Jun 10 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
python中图像通道分离与合并实例
Jan 17 Python
python实现TCP文件传输
Mar 20 Python
python如何保存文本文件
Jun 07 Python
Python 使用Opencv实现目标检测与识别的示例代码
Sep 08 Python
python利用platform模块获取系统信息
Oct 09 Python
Python修改DBF文件指定列
Dec 19 Python
python中PyQuery库用法分享
Jan 15 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(1)
2006/10/09 PHP
类的另类用法--数据的封装
2006/10/09 PHP
PHP XML备份Mysql数据库
2009/05/27 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
详解Python正则表达式re模块
2019/03/19 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
linux面试题参考答案(11)
2016/11/26 面试题
青年文明号复核材料
2014/02/11 职场文书
手工社团活动方案
2014/02/17 职场文书
大学生两会学习心得体会
2014/03/10 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
火箭队口号
2014/06/18 职场文书
2014年科研工作总结
2014/12/03 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电