前段时间,有朋友找我帮忙,自述其手机上使用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)

三、格式转换

通过上边的操作,将m3u8文件中原来的路径,全部转换为了电脑中的相对路径,使用迅雷影音等播放器已经能够播放这些视频了,但朋友要求将其转换为mp4文件,刚开始的思路是利用格式工厂等软件进行转换,省事省力,结果在使用格式工厂转换时,出现错误,提示无法转换没有扩展名的文件,感觉格式工厂类的软件应该有类似的设置,但没有耐心去找,直接转变思路,利用python调用ffmpeg程序进行格式转换。

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

1、到https://github.com/BtbN/FFmpeg-Builds/releases下载ffmpeg程序,选择那个static 版本,这个静态库版本 里面有3个exe: ffmpeg.exe, ffplay.exe, ffprobe.exe,每个exe体积很大,因为相关的dll已经被编译到exe 里面去了。作为工具而言此版本就可以满足我们的需求。

2、下载后,直接解压缩,并将文件路径添加到系统PATH中,在命令行窗口运行

ffmpeg -version

看到此屏幕显示,表示FFmpeg就可以正常使用了。

3、使用ffmpge转换视频格式的方法

一般使用命令

ffmpeg -i inputfile.m3u8 outfile.mp4

即可完成转换,但是文件夹中视频没有扩展名,所以必须告诉它,忽略扩展名的问题,要加上参数:-allowed_extensions ALL,大致意思是允许所有的扩展名,也就同时允许了没有扩展名的情况。

另外,为了提高转换速度,还要对配置文件进行设置。要加上-preset ultrafast参数。

不多说,直接上代码:

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

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

errlist=[]

for mfile in m3u8list:

subname = mfile.split('.')

output_path = subname[0] + "_new.mp4"

commcode="ffmpeg -allowed_extensions ALL -i "+mfile+' -preset ultrafast '+output_path

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

if ret==0:

print (mfile+'is ok')

else:

errlist.append(mfile)

print (errlist)

m3u8手机批量转码_python+ffmpeg,批量转换手机中的m3u8文件相关推荐

  1. python批量查询数据库_Python + MySQL 批量查询百度收录

    做SEO的同学,经常会遇到几百或几千个站点,然后对于收录情况去做分析的情况 那么多余常用的一些工具在面对几千个站点需要去做收录分析的时候,那么就显得不是很合适. 在此特意分享给大家一个批量查询百度收录 ...

  2. python怎么批量下载年报_Python+Wind 批量下载上市公司年报 - Part 1/2

    Python+Wind 批量下载上市公司年报 - Part 1/2作者:张捷 目录1.背景介绍 2.安装Python 3.爬取万得上市公司年报3.1Wind下载公告信息 3.2获得年报地址 4.使用P ...

  3. python 批量下载财务数据_Python+Wind 批量下载上市公司年报 - Part 1/2

    Python+Wind 批量下载上市公司年报 - Part 1/2作者:张捷 目录1.背景介绍 2.安装Python 3.爬取万得上市公司年报3.1Wind下载公告信息 3.2获得年报地址 4.使用P ...

  4. python批量生成图_python图像处理-批量生成纯色图片

    上一篇文章,是基于现有的图片处理的,那要如何通过代码直接生成图片呢. 生成一张纯色的图片 先设置图片的颜色,接着利用Image模块的new方法新生成一张图片,png格式的图片需要设置成rgba,类似的 ...

  5. python模块批量安装方法_python离线批量安装依赖包

    [前提]:已安装pip,下载地址https://pypi.python.org/pypi/pip [步骤一]:打包已安装的依赖包 pip freeze >requirements.txt#生成已 ...

  6. python怎么批量处理数据_python如何批量处理excel数据?_后端开发

    php赋值运算符有哪些_后端开发 php赋值运算符有:1.[=]赋值运算符:2.[+=]加运算符:3.[-=]减运算符:4.[*=]乘运算符:5.[/=]除运算符:6.[.=]连接字符运算符:7.[% ...

  7. python批量修改文件名_python实现批量改文件名称的方法

    这篇文章主要介绍了python实现批量改文件名称的方法,涉及Python中os模块rename方法的相关使用技巧,需要的朋友可以参考下 python实现批量改文件名称的方法 本文实例讲述了python ...

  8. 如何用python批量下载数据_Python实现批量下载文件

    Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_a ...

  9. python批量压缩图片_Python图片批量压缩到指定大小并将JPG转为PNG格式

    背景: 待压缩的图片大小有几十KB到近10M大小不等,且绝大部分图片为JPG格式.这些待压缩图片放在picture文件夹下 以及picture文件夹下的子文件夹中 现需要将picture文件夹下这些图 ...

最新文章

  1. WIN7中 HttpListener 拒绝访问 异常解决 C#
  2. Button的使用(五):从xml中加载
  3. TortoiseGIT创建及合并分支
  4. spring-boot+spring-session集成
  5. python接球游戏
  6. linux 开放端口
  7. TLSF算法1:二级索引的计算
  8. Jenkins Xcode打包ipa
  9. 【Pytorch深度学习实战】(4)前馈神经网络(FNN)
  10. XML 中的 ﹤![CDATA[ ]]>
  11. linux 内存溢出排查_linux下valgrind内存问题排查
  12. HACK RF学习之旅记录3——安装WIN10+Ubuntu双系统
  13. STM32 MPU6050与匿名上位机通讯(V2.6版)
  14. Data Masking-克隆“真实”的假数据
  15. java计算机毕业设计互联网校园家教兼职平台源码+mysql数据库+系统+lw文档+部署
  16. 福昕阅读器更改白色背景为保护色(2020-11-15)
  17. python 多重列表去重_Python对列表去重的多种方法(四种方法)
  18. c陷进与缺陷笔记(5)
  19. CentOS6 NFS安装与配置
  20. 从HoloLens到AI辅助结核病治疗,17年AI在医疗领域几个最重要的应用突破

热门文章

  1. 揭秘程序员面试潜规则,你知道几条(建议收藏)!
  2. airdrop无法点_AirDrop无法正常工作? 这是解决方法
  3. 前端利器CodePen,了解一下吧
  4. linux文件大小查看
  5. Xilinx Vivado定制IP核调用和除法器IP核的latency和resource分析
  6. 汇编语言贪吃蛇、俄罗斯方块双任务设计实现详解(三)——俄罗斯方块详细设计
  7. 黑客攻防(一)网站信息收集
  8. 使用H5Stream实现rtsp视频流播放,在Vue项目中 (无插件、可多视频源播放、亲测可用)
  9. Python与图像处理8
  10. CHAR.VI 函数装饰器和闭包