1. 程式人生 > >m3u8轉換為MP4格式

m3u8轉換為MP4格式

# convert_m3u8.py

# -*- coding:utf-8 -*-  
import sys  
import os  
from glob import glob  
#獲取需要轉換的路徑  
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
    #     print("您輸入的路徑不正確,:-(")
#對轉換的TS檔案進行排序         
def get_sorted_ts(user_path):
    # 對ts檔名字進行重新命名,防止出現001.ts的名字,系統自動改成1.ts
    dirlist = os.listdir(user_path)
    for name in dirlist:
        if name[-3:]==".ts":
            newname = str(int(name[:-3]))+".ts"
            os.rename(user_path+"/"+name,user_path+"/"+newname)
    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就是檔案的名字,_是檔案的副檔名.ts
            file,_ = os.path.splitext(os.path.basename(ts))
            # boxer.append(file)
            # file要轉換為int型別才能保證排序正確,但是要求轉換檔名字是1.ts不能是001.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('目標檔案已存在,程式停止執行。')
                exit(0)
            try:
                os.chdir(user_path)
            except:
                print("請核實檔案路徑地址,程式停止執行!")
                exit(0)
            #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("引數個數非法")

使用說明:

1、首先檔案需是:1.ts,2.ts檔案,其他副檔名不可以,另外如果檔名是001.ts系統會對其進行重新命名修改為1.ts;

2、將上述程式儲存為:convert_m3u8.py;

3、開啟cmd命令進入到convert_m3u8.py檔案所在地址,執行:python convert_m3u8.py m3u8視訊的目錄 要轉換後文件的名字(例如:python convert_m3u8.py D:\123\視訊資料夾 轉換後名字.mp4);

4、如果提示命令列太長,代表該視訊資料夾下檔案太多,可以先選取一部分(一般為1000個以內),轉換為a.ts和b.ts兩個檔案,再將這兩個檔案進行合併轉換。