前段时间,有朋友找我帮忙,自述其手机上使用UC浏览器,缓存的电影有近千个,手机存储不够了,想把这些电影转存到PC机上,并且将其转换为Mp4文件。小事情,安排!
一、分析情况,确定方案。
首先连接手机,将手机上的UCDownloads/VideoData文件夹中的全部文件及文件夹拷贝到电脑上,进行分析。
先看一下手机上缓存的文件格式,是很多个m3u8格式文件和一些文件夹。经查,发现这种文件并不是传统意义上的视频文件,更像是一个索引文件,就像是一本书的目录一样的东西,视频内容保存在那些文件夹中,是很多个有序号的文件。
m3u8文件可以用普通的文本编辑工具进行编辑,其中详细的标签解释,在网上有很多详细的文章,这里就不啰嗦了。在m3u8文件中,最有用的就是视频列表。如下:
从文件内容中可以很明显看出,视频片段的地址是手机上的路径,这就排除了直接使用格式工厂等软件进行转换的模式,因为文件较多,不适合手动修改路径,所以初步确定先使用python编写脚本,逐个修改文件中的路径信息,使用相对地址,即直接将原路径中的“”/storage/emulated/0/UCDownloads/VideoData//“替换掉即可。完成替换后,再使用格式工厂等软件进行格式转换。
二、批量修改文件中的路径
初步思路:1、建一个列表,存放影片文件夹中所有的m3u8文件路径。2、循环列表,打开每一个m3u8文件,逐行进行修改,并将修改后的结果保存到原文件中。(注:m3u8文件较小,可以采用这种方法,但一般情况下不建议使用,可以考虑采用中间文件或保存到新文件后,再删除旧文件的方法)
这里用到了os模块中的几条命令:一是os.listdir(),列出当前文件夹或指定文件夹下所有的文件及文件夹。二是os.path.splitext( ),分割指定路径的文件名和扩展名部分。
直接看代码吧!
import os m3u8list=[] #读取当前目录下所有的m3u8文件。 for fn in os.listdir(): if os.path.splitext(fn)[1]!=\'.m3u8\': continue m3u8list.append(fn) #逐个修改m3u8文件中的路径,将“/storage/emulated/0/UCDownloads/VideoData//”替换为空。 old_text1="/storage/emulated/0/UCDownloads/VideoData//" old_text2="/storage/emulated/0/UCDownloads/VideoData/" for mfile in m3u8list: file_data=\'\' with open(mfile,"r",encoding="utf-8") as f: for line in f: if old_text1 in line: line=line.replace(old_text1,\'\') if old_text2 in line: line=line.replace(old_text2,\'\') file_data+=line with open(mfile,\'w\',encoding="utf-8") as f: f.write(file_data)