python實(shí)現(xiàn)m3u8格式轉(zhuǎn)換為mp4視頻格式
開發(fā)動(dòng)機(jī):最近用手機(jī)QQ瀏覽器下載了一些視頻,視頻越來越多,占用了手機(jī)內(nèi)存,于是想把下載的視頻傳到電腦上保存,可后來發(fā)現(xiàn)這些視頻都是m3u8格式的,且這個(gè)格式的視頻都切成了碎片,存在電腦里不方便查看,于是想把它轉(zhuǎn)換為其他可以直接打開播放的完整視頻,到網(wǎng)上找了一些工具,都不怎么好用,后來發(fā)現(xiàn)一個(gè)手機(jī)端的“緩沖合并工具”,倒是可以用,但是合并的視頻順序是亂的,碎片的視頻順序還需要用戶手動(dòng)調(diào)整,感覺太耽誤時(shí)間了,于是自己打算寫一個(gè)轉(zhuǎn)換工具。
直接上代碼:(程序的文件名為:convert_m3u8.py)
# -*- coding:utf-8 -*- import sys import os from glob import glob #獲取需要轉(zhuǎn)換的路徑 def get_user_path(argv_dir): if os.path.isdir(argv_dir): return argv_dir elif os.path.isabs(argv_dir): return argv_dir else: return False #對(duì)轉(zhuǎn)換的TS文件進(jìn)行排序 def get_sorted_ts(user_path): ts_list = glob(os.path.join(user_path,'*.ts')) #print(ts_list) boxer = [] for ts in ts_list: if os.path.exists(ts): #print(os.path.splitext(os.path.basename(ts))) file,_ = os.path.splitext(os.path.basename(ts)) boxer.append(int(file)) boxer.sort() #print(boxer) return boxer #文件合并 def convert_m3u8(boxer,o_file_name): #cmd_arg = str(ts0)+"+"+str(ts1)+" "+o_file_name tmp = [] for ts in boxer: tmp.append(str(ts)+'.ts') cmd_str = '+'.join(tmp) exec_str = "copy /b "+cmd_str+' '+o_file_name #print("copy /b "+cmd_str+' '+o_file_name) os.system(exec_str) if __name__=='__main__': #print(sys.argv[1:]) argv_len = len(sys.argv) if argv_len == 3: o_dir,o_file_name =sys.argv[1:] #print(o_dir+":"+o_file_name) user_path = get_user_path(o_dir) #print(user_path) if not user_path: print("您輸入的路徑不正確,:-("); else: if os.path.exists(os.path.join(user_path,o_file_name)): print('目標(biāo)文件已存在,程序停止運(yùn)行。') exit(0) os.chdir(user_path) #convert_m3u8('2.ts','4.ts',o_file_name) boxer = get_sorted_ts(user_path) convert_m3u8(boxer,o_file_name) #print(os.getcwd()) else: print("參數(shù)個(gè)數(shù)非法");
注:代碼不多,原理也很簡(jiǎn)單,就是把各個(gè)碎片視頻按照順序合并為一個(gè)視頻文件。
使用方法如下:
python convert_m3u8.py m3u8視頻的目錄 要轉(zhuǎn)換后文件的名字
其中第一個(gè)參數(shù)為m3u8視頻的目錄(m3u8的碎片視頻在手機(jī)里是隱藏的,需要將隱藏文件顯示出來才可以將文件導(dǎo)出到電腦里,在安卓手機(jī)里將隱藏文件夾前面的.重命名去掉就可以了),第二個(gè)參數(shù)為要轉(zhuǎn)換后文件的名字。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python3.6根據(jù)m3u8下載mp4視頻
- python爬取m3u8連接的視頻
- python 實(shí)現(xiàn)多線程下載m3u8格式視頻并使用fmmpeg合并
- python爬取基于m3u8協(xié)議的ts文件并合并
- 利用python爬取m3u8格式視頻的具體實(shí)現(xiàn)
- Python通過m3u8文件下載合并ts視頻的操作
- python將下載到本地m3u8視頻合成MP4的代碼詳解
- Python解析m3u8拼接下載mp4視頻文件的示例代碼
- Python爬蟲之m3u8文件里提取小視頻的正確姿勢(shì)
- python基于?Web?實(shí)現(xiàn)?m3u8?視頻播放的實(shí)例
相關(guān)文章
Python貪心算法Greedy Algorithm解決案例小結(jié)
這篇文章主要為大家介紹了Python貪心算法Greedy Algorithm解決案例小結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Python?dataframe如何設(shè)置index
這篇文章主要介紹了Python?dataframe如何設(shè)置index,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05pyqt5 實(shí)現(xiàn) 下拉菜單 + 打開文件的示例代碼
今天小編就為大家分享一篇pyqt5 實(shí)現(xiàn) 下拉菜單 + 打開文件的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06深入分析在Python模塊頂層運(yùn)行的代碼引起的一個(gè)Bug
幾個(gè)星期前, 我的同事跑過來, 說發(fā)現(xiàn)一個(gè)奇怪的Bug: 在使用Python的subprocess運(yùn)行子進(jìn)程時(shí), 當(dāng)子進(jìn)程運(yùn)行失敗時(shí)居然沒有拋出錯(cuò)誤!2014-07-07PyTorch模型容器與AlexNet構(gòu)建示例詳解
這篇文章主要為大家介紹了PyTorch模型容器與AlexNet構(gòu)建示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07利用Python實(shí)現(xiàn)批量加密Excel文件
在日常工作中,我們經(jīng)常需要處理大量的Excel文件,為了保護(hù)敏感數(shù)據(jù)的安全性,我們可能需要對(duì)這些文件進(jìn)行加密,本文主要介紹了如何使用Python實(shí)現(xiàn)批量加密Excel文件,需要的可以參考下2023-11-11解讀Tensorflow2.0訓(xùn)練損失值降低,但測(cè)試正確率基本不變的情況
這篇文章主要介紹了Tensorflow2.0訓(xùn)練損失值降低,但測(cè)試正確率基本不變的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06關(guān)于tf.nn.dynamic_rnn返回值詳解
今天小編就為大家分享一篇關(guān)于tf.nn.dynamic_rnn返回值詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01pygame學(xué)習(xí)筆記(1):矩形、圓型畫圖實(shí)例
這篇文章主要介紹了pygame學(xué)習(xí)筆記(1):矩形、圓型畫圖實(shí)例,本文講解了pygame窗口、窗口退出、pygame中的顏色、圓形、矩形及一個(gè)完整實(shí)例,需要的朋友可以參考下2015-04-04