欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

m3u8转换为MP4格式

m3u8转换为MP4格式

2018年07月15日 19:12:42 執筆冩回憶 阅读数:3795 标签: python 更多                    
个人分类: python                    
 版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z564359805/article/details/81055825
  1. # convert_m3u8.py                            
  2. # -*- coding:utf-8 -*-                              
  3. import sys
  4. import os
  5. from glob import glob
  6. #获取需要转换的路径                              
  7. def get_user_path(argv_dir):                            
  8. if os.path.isdir(argv_dir):
  9. return argv_dir
  10. elif os.path.isabs(argv_dir):
  11. return argv_dir
  12. # else:                            
  13. #     # return False                            
  14. #     print("您输入的路径不正确,:-(")                            
  15. #对转换的TS文件进行排序                                    
  16. def get_sorted_ts(user_path):                            
  17. # 对ts文件名字进行重命名,防止出现001.ts的名字,系统自动改成1.ts                            
  18. dirlist = os.listdir(user_path)
  19. for name in dirlist:
  20. if name[-3:]==".ts":
  21. newname = str(int(name[:-3]))+".ts"                            
  22. os.rename(user_path+"/"+name,user_path+"/"+newname)
  23. ts_list = glob(os.path.join(user_path,'*.ts'))
  24. # print(ts_list)                            
  25. boxer = []
  26. for ts in ts_list:
  27. if os.path.exists(ts):
  28. # print(os.path.splitext(os.path.basename(ts)))                            
  29. # file就是文件的名字,_是文件的扩展名.ts                            
  30. file,_ = os.path.splitext(os.path.basename(ts))
  31. # boxer.append(file)                            
  32. # file要转换为int类型才能保证排序正确,但是要求转换文件名字是1.ts不能是001.ts                            
  33. boxer.append(int(file))
  34. boxer.sort()
  35. # print(boxer)                              
  36. return boxer
  37. #文件合并                                
  38. def convert_m3u8(boxer,o_file_name):  
  39. #cmd_arg = str(ts0)+"+"+str(ts1)+" "+o_file_name                              
  40. tmp = []
  41. for ts in boxer:
  42. tmp.append(str(ts)+'.ts')
  43. cmd_str = '+'.join(tmp)
  44. exec_str = "copy /b "+cmd_str+' '+o_file_name
  45. # print("copy /b "+cmd_str+' '+o_file_name)                              
  46. os.system(exec_str)
  47. if __name__=='__main__':
  48. # print(sys.argv[1:])                              
  49. argv_len = len(sys.argv)
  50. if argv_len == 3:
  51. o_dir,o_file_name =sys.argv[1:]
  52. # print(o_dir+":"+o_file_name)                            
  53. user_path = get_user_path(o_dir)
  54. # print(user_path)                            
  55. if not user_path:
  56. print("您输入的路径不正确,:-(")
  57. else:
  58. if os.path.exists(os.path.join(user_path,o_file_name)):
  59. print('目标文件已存在,程序停止运行。')
  60. exit(0)
  61. try:
  62. os.chdir(user_path)
  63. except:
  64. print("请核实文件路径地址,程序停止运行!")
  65. exit(0)
  66. #convert_m3u8('2.ts','4.ts',o_file_name)                            
  67. boxer = get_sorted_ts(user_path)
  68. convert_m3u8(boxer,o_file_name)
  69. #print(os.getcwd())                            
  70. else:
  71. 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两个文件,再将这两个文件进行合并转换。

来自  https://blog.csdn.net/z564359805/article/details/81055825                


普通分类: