分享

python实现将m3u8格式转换为mp4视频格式

 叹落花 2017-11-06

        开发动机:最近用手机QQ浏览器下载了一些视频,视频越来越多,占用了手机内存,于是想把下载的视频传到电脑上保存,可后来发现这些视频都是m3u8格式的,且这个格式的视频都切成了碎片,存在电脑里不方便查看,于是想把它转换为其他可以直接打开播放的完整视频,到网上找了一些工具,都不怎么好用,后来发现一个手机端的“缓冲合并工具”,倒是可以用,但是合并的视频顺序是乱的,碎片的视频顺序还需要用户手动调整,感觉太耽误时间了,于是自己打算写一个转换工具。

      直接上代码:(程序的文件名为:convert_m3u8.py)
        

  1. # -*- coding:utf-8 -*-  
  2. import sys  
  3. import os  
  4. from glob import glob  
  5. #获取需要转换的路径  
  6. def get_user_path(argv_dir):  
  7.     if os.path.isdir(argv_dir):  
  8.         return argv_dir  
  9.     elif os.path.isabs(argv_dir):  
  10.         return argv_dir  
  11.     else:  
  12.         return False  
  13. #对转换的TS文件进行排序         
  14. def get_sorted_ts(user_path):  
  15.     ts_list = glob(os.path.join(user_path,'*.ts'))  
  16.     #print(ts_list)  
  17.     boxer = []  
  18.     for ts in ts_list:  
  19.         if os.path.exists(ts):  
  20.             #print(os.path.splitext(os.path.basename(ts)))  
  21.             file,_ = os.path.splitext(os.path.basename(ts))  
  22.             boxer.append(int(file))  
  23.     boxer.sort()  
  24.     #print(boxer)  
  25.     return boxer  
  26. #文件合并     
  27. def convert_m3u8(boxer,o_file_name):  
  28.     #cmd_arg = str(ts0)+"+"+str(ts1)+" "+o_file_name  
  29.     tmp = []  
  30.     for ts in boxer:  
  31.         tmp.append(str(ts)+'.ts')  
  32.     cmd_str = '+'.join(tmp)  
  33.     exec_str = "copy /b "+cmd_str+' '+o_file_name  
  34.     #print("copy /b "+cmd_str+' '+o_file_name)  
  35.     os.system(exec_str)  
  36.           
  37.           
  38. if __name__=='__main__':  
  39.     #print(sys.argv[1:])  
  40.     argv_len = len(sys.argv)  
  41.     if argv_len == 3:  
  42.         o_dir,o_file_name =sys.argv[1:]  
  43.         #print(o_dir+":"+o_file_name)  
  44.         user_path = get_user_path(o_dir)  
  45.         #print(user_path)  
  46.         if not user_path:  
  47.             print("您输入的路径不正确,:-(");  
  48.         else:  
  49.             if os.path.exists(os.path.join(user_path,o_file_name)):  
  50.                 print('目标文件已存在,程序停止运行。')  
  51.                 exit(0)  
  52.             os.chdir(user_path)  
  53.             #convert_m3u8('2.ts','4.ts',o_file_name)  
  54.             boxer = get_sorted_ts(user_path)  
  55.             convert_m3u8(boxer,o_file_name)  
  56.             #print(os.getcwd())  
  57.     else:  
  58.         print("参数个数非法");  
  59.       

注:代码不多,原理也很简单,就是把各个碎片视频按照顺序合并为一个视频文件。

使用方法如下:

python  convert_m3u8.py    m3u8视频的目录   要转换后文件的名字

其中第一个参数为m3u8视频的目录(m3u8的碎片视频在手机里是隐藏的,需要将隐藏文件显示出来才可以将文件导出到电脑里,在安卓手机里将隐藏文件夹前面的.重命名去掉就可以了),第二个参数为要转换后文件的名字。




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约