python mp4转m3u8,python 下载m3u8

  python mp4转m3u8,python 下载m3u8

  前段时间有个朋友找我帮忙,说他手机用的是UC浏览器,缓存的电影有近千部,手机存储不够。他想把这些电影转移到PC上,转换成Mp4文件。小事,安排!

  首先,分析形势,确定方案。

  首先连接手机,将手机上UCDownloads/VideoData文件夹中的所有文件和文件夹复制到电脑中进行分析。

  我们来看看手机上缓存的文件格式。有很多m3u8格式的文件和一些文件夹。经过调查发现,这种文件并不是传统的视频文件,更像是索引文件,类似于图书目录的东西。视频内容就存放在那些文件夹里,还有很多带序列号的文件。

  M3u8文件可以用常用的文本编辑工具编辑,包括详细的标签说明。网上有很多详细的文章,这里就不赘述了。在m3u8文件中,最有用的是视频列表。如下所示:

  从文件内容可以明显看出,视频片段的地址是手机上的路径,排除了使用format factory等软件直接转换的模式。由于文件比较多,不适合手动修改路径,所以初步确定用python写一个脚本,逐个修改文件中的路径信息,使用相对地址,即直接替换原路径中的“/storage/emulated/0/UC downloads/videodata//”。替换后使用format factory等软件进行格式转换。

  第二,批量修改文件中的路径。

  初步想法:1。建立一个列表来存储电影文件夹中的所有m3u8文件路径。2.循环列表,打开每个m3u8文件,逐行修改,将修改结果保存到原文件。(注:m3u8文件较小,可以使用这种方法,但一般不建议使用。您可以考虑使用中间文件或在保存到新文件后删除旧文件)

  这里用到os模块中的几个命令:一个是os.listdir(),列出当前文件夹或指定文件夹下的所有文件和文件夹。第二个是os.path.splitext(),它拆分指定路径的文件名和扩展名。

  直接看代码!

  导入操作系统

  m3u8list=[]

  #读取当前目录下的所有m3u8文件。

  对于os.listdir()中的fn:

  if os.path.splitext(fn)[1]!=.m3u8 :

  继续

  m3u8list.append(fn)

  #逐个修改m3u8文件中的路径,将“/storage/emulated/0/UC downloads/video data//”替换为空。

  old _ text 1=/storage/emulated/0/UC downloads/video data//

  old _ text 2=/storage/emulated/0/UC downloads/video data/

  对于mfile列表中的mfile:

  file_data=

  用open(mfile, r ,encoding=utf-8 )作为f:

  对于f中的行:

  如果行中有old_text1:

  line=line.replace(old_text1,)

  如果行中有old_text2:

  line=line.replace(old_text2,)

  文件数据=行

  用open(mfile, w ,encoding=utf-8 )作为f:

  f.write(文件数据)

  第三,格式转换

  通过上述操作,m3u8文件中的所有原始路径都被转换为计算机中的相对路径。这些视频已经可以用迅雷影音等播放器播放了,但是我朋友要求转换成mp4文件。一开始的想法是用format factory等软件进行转换,省事省力。结果在使用format factory进行转换时,出现了错误,表示没有扩展名的文件无法转换。我感觉format factory软件应该也有类似的设置,但是我没有耐心去找,就直接改主意了。

  先简单说一下ffmpeg。它是最常用的视频处理开源软件。功能强大,用途广泛,广泛应用于视频网站和商业软件,也是许多音视频格式的标准编解码实现。(格式工厂应该只用ffmpeg)

  1.在https://github.com/BtbN/FFmpeg-Builds/releases,下载ffmpeg程序,选择静态版本。在这个静态库版本中有三个前任:ffmpeg.exe、ffplay.exe和ffprobe.exe。每个exe都有很大的体积,因为相关的dll已经编译成了EXE。作为工具,这个版本可以满足我们的需求。

  2.下载后直接解压,将文件路径添加到系统路径,在命令行窗口运行即可。

  ffmpeg版本

  看到这个画面说明FFmpeg可以正常使用。

  3.利用ffmpge转换视频格式的方法

  通用命令

  ffmpeg -i输入文件. m3 u8 outfile.mp4

  即可以完成转换,但文件夹中的视频没有扩展名,必须告知不要理会扩展名的问题,要加上参数:-allowed_extensions ALL,大致意思是允许所有扩展名,也允许没有扩展名的情况。

  另外,为了提高转换速度,应该设置配置文件。添加-preset超快参数。

  话不多说,直接上码:

  #调用FFMPEG,逐个转换。参数一,忽略文件类型。第二,转换后的文件名。

  #这里因为不需要返回值,只需要知道转换是否成功,所以使用子进程模块中的call命令调用ffmpeg程序。

  errlist=[]

  对于mfile列表中的mfile:

  subname=mfile.split( . )

  output _ path=subname[0] _ new . MP4

  commcode= ffmpeg-allowed _ extensions ALL-I mfile -preset ultra fast output _ path

  ret=subprocess.call(commcode,shell=True)

  如果ret==0:

  打印(mfile 可以)

  否则:

  errlist.append(mfile)

  打印(错误列表)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: