python实现m3u8格式转换为mp4视频格式
作者:septwolves2015 发布时间:2021-05-09 00:48:02
标签:python,m3u8,mp4
开发动机:最近用手机QQ浏览器下载了一些视频,视频越来越多,占用了手机内存,于是想把下载的视频传到电脑上保存,可后来发现这些视频都是m3u8格式的,且这个格式的视频都切成了碎片,存在电脑里不方便查看,于是想把它转换为其他可以直接打开播放的完整视频,到网上找了一些工具,都不怎么好用,后来发现一个手机端的“缓冲合并工具”,倒是可以用,但是合并的视频顺序是乱的,碎片的视频顺序还需要用户手动调整,感觉太耽误时间了,于是自己打算写一个转换工具。
直接上代码:(程序的文件名为: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
#对转换的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
0
投稿
猜你喜欢
- 最近做了wap站中的搜索结果页的改版,记录一下关于锚点链接的心得~关于锚点链接锚点链接一般用于比较长的网页,使用内部链接建立页内目录。单击目
- 惊叹于老外的发现 《CSS Background image on html image element?》,自己从没关注过,也没想过如此的
- 本文实例讲述了python实现集中式的病毒扫描功能。分享给大家供大家参考,具体如下:一 点睛本次实践实现了一个集中式的病毒扫描管理
- 这个仿msn的右下角popup提示窗口效果很久以前收集的,现在整理出来给大家分享,需要的朋友可以拿去用,特点,提示窗口内容和js代码分离容易
- 问题:m = re.findall('[0-9]*4[0-9]*', '[4]') 可以匹配到4.m = r
- 1.计算长度value = "wangdianchao"# 计算字符个数(长度)number = len(value)p
- 一、背景:nginx 的log 不会自动按天备份,而且记录时间格式不统一,此程序专门解决这两个问题;二、windows 部署方式1.在 ng
- 学生信息管理系统负责编辑学生信息,供大家参考,具体内容如下第一次发帖,下面通过python实现一个简单的学生信息管理系统要求如下:1.添加学
- 本文实例讲述了Python运维自动化之nginx配置文件对比操作。分享给大家供大家参考,具体如下:文件差异对比diff.py#!/usr/b
- Dreaweaver MX 2004 中增加了图片处理功能,如图片亮度和对比度的调节、图片的锐化效果等
- 本文实例讲述了PHP基于rabbitmq操作类的生产者和消费者功能。分享给大家供大家参考,具体如下:注意事项:1、accept.php消费者
- golang 1.7版本中context库被很多标准库的模块所使用,比如net/http和os的一些模块中,利用这些原生模块,我们就不需要自
- 创建时间序列函数pd.date_range()根据指定的范围,生成时间序列DatetimeIndex,每隔元素的类型为Timestamp。该
- if语句用来检验一个条件, 如果 条件为真,我们运行一块语句(称为 if-块 ), 否则 我们处理另外一块语句(称为 else-块 )。 e
- 序列化模块import pickle序列化和反序列化把不能直接存储的数据变得可存储,这个过程叫做序列化。把文件中的数据拿出来,回复称原来的数
- 本文实例讲述了Python对切片命名清除索引的方法。分享给大家供大家参考,具体如下:问题:如何清理掉到处都是硬编码的切片索引解决方案:对切片
- class ascii{function decode($str){ preg_match_all( &
- 本文实例讲述了Python使用win32 COM实现Excel的写入与保存功能。分享给大家供大家参考,具体如下:很久之前通过东拼西凑实现过使
- 从publish 表中取出第 n 条到第 m 条的记录的sql语句写法:SELECT TOP m-n+1 *&
- 近几天闲着没事开始学了些python,看了看之前写过的代码,把写过的基础的几个程序写进博客,今天是第一个。一个可以说简单的不能再简单的小程序