开发动机:最近用手机QQ浏览器下载了一些视频,视频越来越多,占用了手机内存,于是想把下载的视频传到电脑上保存,可后来发现这些视频都是m3u8格式的,且这个格式的视频都切成了碎片,存在电脑里不方便查看,于是想把它转换为其他可以直接打开播放的完整视频,到网上找了一些工具,都不怎么好用,后来发现一个手机端的“缓冲合并工具”,倒是可以用,但是合并的视频顺序是乱的,碎片的视频顺序还需要用户手动调整,感觉太耽误时间了,于是自己打算写一个转换工具。
直接上代码:(程序的文件名为:convert_m3u8.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# -*- 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
#对转换的TS文件进行排序
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 ( '目标文件已存在,程序停止运行。' )
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 ( "参数个数非法" );
|
注:代码不多,原理也很简单,就是把各个碎片视频按照顺序合并为一个视频文件。
使用方法如下:
python convert_m3u8.py m3u8视频的目录 要转换后文件的名字
其中第一个参数为m3u8视频的目录(m3u8的碎片视频在手机里是隐藏的,需要将隐藏文件显示出来才可以将文件导出到电脑里,在安卓手机里将隐藏文件夹前面的.重命名去掉就可以了),第二个参数为要转换后文件的名字。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/septwolves2015/article/details/76408742