[实践] python 处理 m3u8 有视频无音频录像文件
2018-02-11 17:22
681 查看
引言
我们公司主要从事线上音乐教育,比较看中直播生成的录像回放质量事件
讲师生成的m3u8回放,前面4分钟没有声音预期处理
截掉前4分钟的无声音视频,并把剩余的ts视频合成mp4文件;脚本语言: python处理
第一步
把m3u8中所有的ts文件下载到本地,这个时候python库的强大就体现出来了https://github.com/globocom/m3u8.git,
提供了读取m3u8内部文件信息的库
""" 获取m3u8ts文件 """ def getM3u8(url): m3u8_obj = m3u8.load(url) # this could also be an absolute filename ts_url_list = [] base_uri = m3u8_obj.base_uri ts_list = m3u8_obj.files for _ts in ts_list: ts_url = base_uri + _ts ts_url_list.append(ts_url) # print ts_url # response = requests.head(ts_url) # if response.status_code == 200: # print "URL 没问题" return ts_url_list
第二步
下载ts文件到指定路径,并手动删除出现问题的几个ts文件""" 下载ts文件 """ def download_movie(movie_url, _path): os.chdir(_path) print '>>>[+] downloading...' print '-' * 60 error_get = [] for _url in movie_url: # ts视频的名称 # movie_name = _url.split('/')[-1][-6:] movie_name = str(_url.split("/")[7]).split("?")[0] try: # 'Connection':'close' 防止请求端口占用 # timeout=30 防止请求时间超长连接 movie = requests.get(_url, headers = {'Connection':'close'}, timeout=60) with open(movie_name, 'wb') as movie_content: movie_content.writelines(movie) print '>>>[+] File ' + movie_name + ' done' # 捕获异常,记录失败请求 except: error_get.append(_url) continue # 如果没有不成功的请求就结束 if error_get: # print u'共有%d个请求失败' % len(file_list) print '-' * 60 download_movie(error_get, _path) else: print '>>>[+] Download successfully!!!'
第三步
采用 ffmpeg方式 ,输出合并ts文件的命令""" 合并ts文件,输出执行语句 ls * | perl -nale 'chomp;push @a, $_;END{printf "ffmpeg -i \"concat:%s\" -acodec copy -vcodec copy -absf aac_adtstoasc out.mp4\n", join("|",@a)}' """ def hebing(path,outfile): filelist = [] for file in os.listdir(path): if len(file.split(".")) == 2: if file.split(".")[1] == 'ts': filelist.append(path + file) str = '|'.join(filelist) cmd_str = 'ffmpeg -i \"concat:' + str + '\" ' + '-acodec copy -vcodec copy -absf aac_adtstoasc ' + path + outfile print cmd_str return cmd_str
第四步
运行shell命令""" 运行ffmpeg """ def runConvertMp4(cmd_str): str_env = "/Users/huqingen/Desktop/Finger/tool/ffmpeg/" str_cmd = str_env + cmd_str print str_cmd subprocess.call(str_cmd, shell=True)
第五步
main方法运行if __name__ == "__main__": url = "http://xxxxxx.com/xxxx.m3u8?auth_key=xxxxx" path = "/opt/ts/" ts_url_list = getM3u8(url) download_movie(ts_url_list,path) cmd_str = hebing(path,"out.mp4") runConvertMp4(cmd_str)
相关文章推荐
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命
- Python在Windows环境下处理文件路径问题最佳实践
- python处理音频文件(mp3)
- 关于ffmpeg 的总结(一个linux下集屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- Visual_C++音频视频处理技术及工程实践 下载
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- windows7上面安装opencv python开发环境,并处理cv2.VideoCapture()打不开视频文件的问题
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- Visual_C++音频视频处理技术及工程实践
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- Java 处理视频 、音频文件(读取视频时长等) - JAVE
- VisualC++音频视频处理技术及工程实践
- 关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- python 下载M3U8文件对应的视频
- visual c++ 音频视频处理技术及工程实践
- [转]关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- [转]关于ffmpeg 的总结(一个linux 下 集 屏幕录像录音,音频视频转换,合并音频视频文件,格式转换于一身的命令)
- 快速分割任何视频 Flv 音频aac wma等等文件,无需重新编码
- python处理文本文件实现生成指定格式文件的方法