利用python+ffmpeg合并B站視頻及格式轉(zhuǎn)換的實(shí)例代碼
利用python+ffmpeg合并B站視頻及格式轉(zhuǎn)換 B站客戶端下載的視頻一般有兩種格式:早期的多為blv格式(由flv格式轉(zhuǎn)換而來,音視頻軌道在同一文件下)。
如今的多為m4s格式,音頻軌視頻軌分開 以下為利用ffmpeg簡單對文件處理,使其轉(zhuǎn)換為大多數(shù)播放器能正常播放的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("轉(zhuǎn)碼系統(tǒng)") 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轉(zhuǎn)mp4") frame1 = tk.Frame(tab) tab1 = tab.add(frame1, text = "blv,flv轉(zhuǎn)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="轉(zhuǎn)碼成功!") 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="轉(zhuǎn)碼成功!") 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\冠世一戰(zhàn).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 = "請輸入開始時(shí)間(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 = "請輸入截取時(shí)間(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()
到此這篇關(guān)于利用python+ffmpeg合并B站視頻及格式轉(zhuǎn)換的實(shí)例代碼的文章就介紹到這了,更多相關(guān)python+ffmpeg合并B站視頻及格式轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pytorch自定義Dataset和DataLoader去除不存在和空數(shù)據(jù)的操作
這篇文章主要介紹了Pytorch自定義Dataset和DataLoader去除不存在和空數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03python使用lxml xpath模塊解析XML遇到的坑及解決
這篇文章主要介紹了python使用lxml xpath模塊解析XML遇到的坑及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Python中的random函數(shù)實(shí)例詳解
random模塊提供生成偽隨機(jī)數(shù)的函數(shù),在使用時(shí)需要導(dǎo)入random模塊,這篇文章主要介紹了Python中的random函數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02python文字轉(zhuǎn)語音的實(shí)例代碼分析
在本篇文章里小編給大家整理的是關(guān)于python文字轉(zhuǎn)語音的實(shí)例代碼分析,有需要的朋友們可以參考下。2019-11-11深入探討Python復(fù)合型數(shù)據(jù)的常見陷阱與避免方法
在Python中,復(fù)合型數(shù)據(jù)(例如列表、元組、集合和字典)是非常常用的數(shù)據(jù)類型,本文將深入探討Python復(fù)合型數(shù)據(jù)的常見陷阱,并提供一些避免這些問題的實(shí)用建議和技巧,希望對大家有所幫助2024-03-03Python+Selenium實(shí)現(xiàn)自動化的環(huán)境搭建的步驟(圖文)
這篇文章主要介紹了Python+Selenium實(shí)現(xiàn)自動化的環(huán)境搭建的步驟(圖文),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Django為窗體加上防機(jī)器人的驗(yàn)證碼功能過程解析
這篇文章主要介紹了Django為窗體加上防機(jī)器人的驗(yàn)證碼功能過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08