m3u8格式转mp4

例如现有一个m3u8格式的视频地址:https://rescdn.yishihui.com/longvideo/videocomposite/output/live/696380/1583998162597time-1LD.m3u8?Expires=1585381145&OSSAccessKeyId=LTAIHZz0zdTMC7HN&Signature=nrihRPuLby7Lm8F92P3NtoXdlIo%3D,需要下载为mp4格式,解决思路:

通过m3u8格式的视频地址下载m3u8文件,文档编辑模式打开下载下来的m3u8文件,里面有所有ts文件,上面地址下载的m3u8文件打开是这样的:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:19
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:18.640000,
1583998162597time-1LD-00001.ts
#EXTINF:10.000000,
1583998162597time-1LD-00002.ts
#EXTINF:8.400000,
1583998162597time-1LD-00003.ts
#EXTINF:10.000000,
1583998162597time-1LD-00004.ts
#EXTINF:10.000000,
1583998162597time-1LD-00005.ts
#EXTINF:10.000000,
1583998162597time-1LD-00006.ts
#EXTINF:10.000000,
1583998162597time-1LD-00007.ts
#EXTINF:7.200000,
1583998162597time-1LD-00008.ts
#EXTINF:10.000000,
1583998162597time-1LD-00009.ts
#EXT-X-ENDLIST

上面只有ts的文件名,但是没有ts的全路径,需要用抓包工具去抓取上面m3u8视频地址的网站点击播放,抓取ts的地址拼接方式,我这边抓到的是https://rescdn.yishihui.com/longvideo/videocomposite/output/live/696380/1583998162597time-1LD-00001.ts,所以得到ts拼接的前缀是:https://rescdn.yishihui.com/longvideo/videocomposite/output/live/696380/

下一步是通过字符串处理上面的m3u8文件,得到所有的ts文件名:1583998162597time-1LD-00001.ts、1583998162597time-1LD-00002.ts、1583998162597time-1LD-00003.ts、1583998162597time-1LD-00004.ts....然后按顺序依次ts的内容,追加的方式存放到一个文件tmp_out.ts,然后利用插件(ffmpeg)转换tmp_out.ts为mp4格式,如果直接保存为tmp_out.mp4的话,视频播放软件是可以播放的,但是网页的形式是不能播放的,因为字符编码缺少了视频信息,所以需要插件来转换格式。

准备:安装ffmpeg插件

windows安装ffmpeg:

下载地址:https://ffmpeg.org/download.html

下载解压,命令行进入到加压文件夹/bin/目录下就可以直接使用ffmpeg命令

linux安装ffmpeg:

下载地址:https://ffmpeg.org/download.html

下载完上传到linux服务器,解压xz:

xz -d ffmpeg-git-amd64-static.tar.xz

解压tar:

tar -xvf ffmpeg-git-amd64-static.tar

进入解压目录,编译安装:

cd ffmpeg
./ffmpeg

安装完成

PHP完整的实现代码:

<?php$url = 'https://rescdn.yishihui.com/longvideo/videocomposite/output/live/696380/1583998162597time-1LD.m3u8?Expires=1585381145&OSSAccessKeyId=LTAIHZz0zdTMC7HN&Signature=nrihRPuLby7Lm8F92P3NtoXdlIo%3D';
$ts_content = file_get_contents($url);
$ts_content = explode(',', $ts_content);
$ts_file = array();
foreach ($ts_content as $key => $value) {if($key == 0) continue;$value = trim($value);$ts_file[] = substr($value, 0, strpos($value, '.ts') + 3);
}
$url_prefix = substr($url, 0, strpos($url, '.m3u8'));
$url_prefix = substr($url, 0, strrpos($url, '/') + 1);
$file_content = '';
foreach ($ts_file as $key => $value) {$file_content .= file_get_contents($url_prefix . $value);
}file_put_contents('tmp_out.ts', $file_content);
// FFMPEG_PATH 是你自己解压ffmpeg的bin路径,例如我的是F:/ffmpeg/bin/
exec(FFMPEG_PATH . "ffmpeg -i tmp_out.ts tmp_out.mp4");

php m3u8转mp4相关推荐

  1. m3u8转mp4无损转换的方法和技巧

    为什么要将m3u8格式转换为mp4格式? 因为m3u8格式很多播放器不支持,只能在浏览器在线看,但是在线看有些不方便而且会因为网络卡顿导致播放体验效果不理想,有的m3u8是加密的,使用一些工具下载后也 ...

  2. m3u8转MP4 视频最最有效的办法!!!!!!!

    m3u8转MP4 视频最最有效的办法!!!!!!! 手写日志. 解决办法就是这个! m3u8转MP4 视频最最有效的办法!!!!!!! http://www.oicqzone.com/soft/201 ...

  3. 安卓手机m3u8转为mp4格式100%有效的方法

    本文以图片形式手把手演示,请读者耐心 首先推荐两款安卓手机上全网视频下载神器 X浏览器和QQ浏览器 虽然我平时用安卓手机的X浏览器(这款浏览器强烈推荐使用)的嗅探资源媒体功能就已经能下载90%的网络视 ...

  4. m3u8转mp4,不用格式软件

    m3u8转mp4,不用格式软件 m3u8视频格式 创建bat脚本文件 简化代码输入 运行脚本文件 m3u8视频格式 手机端QQ浏览器自带视频下载插件,有的网站需要登录才能下载视频,在QQ浏览器中不需要 ...

  5. 使用JAVA将m3u8转换为mp4格式

    今天下载了一部电影,不过是m3u8格式,想要分享分享不了,就写了个小程序将m3u8转换为mp4 代码的使用方法 1.下载代码,链接如下 编译好的代码地址 2.将下载好的代码复制至m3u8文件夹 3.打 ...

  6. python实现m3u8转mp4

    python实现m3u8转mp4 需要用到两个版本的ffmpeg,文件及原码请到项目地址自取 https://gitee.com/z2322739526/m3u8 主要解决ts改后缀mp4后无法上传网 ...

  7. python实现m3u8转mp4方法2

    python实现m3u8转mp4方法2 项目地址 https://gitee.com/z2322739526/m3u8/tree/master/new 针对chrono下载器插件保存的ts,下载后文件 ...

  8. m3u8, flv, mp4格式视频demo源码分享

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>m3u ...

  9. Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)

    当前环境:PHP.Ueditor的版本是1.4.3 新的需求是,需要在Ueditor 富文本编辑器中,插入视频播放,并且视频格式有MP4,也有M3U8. 百度编辑器默认的是embed,需要修改下配置. ...

  10. 某站视频python抓取: m3u8转mp4

    之前利用python简单爬虫抓过一些图片,最近想到了抓取视频.由于很多地方视频不提供下载.所以觉得有必要学习一下,以备不时之需.备注:这里仅记录碰到的网站视频实例,不保证适用所有情况. 基本概念与思路 ...

最新文章

  1. dockerfile指定jvm参数
  2. 重学前端-学习笔记-JavaScript对象
  3. 康宁玻璃ct值计算公式_CT原理(一)
  4. Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
  5. php中单引号与双引号的区别
  6. 7-1 最大子列和问题 (20 分)
  7. Shader中颜色混合的算法
  8. mysql从盘延迟_Mysql-主从延迟解决方法
  9. swiper实现触摸滑动
  10. drf 频率组件 META字典详情
  11. 查看被系统或程序打开文件工具 OpenedFilesView
  12. Hadoop安装与配置详细教程
  13. VSCode调试JavaScript代码方法
  14. 高考改变命运,来自一个湖南贫困村的真实样本
  15. Java SE、OpenJDK、Java EE、Java 框架、Java ME 等概念之间的区别
  16. 征途服务器 文件夹需手,手游新征途手工架设服务端+配套双客户端+架设流程+服务器部署文档等...
  17. linux 全选 编辑文本_强烈推荐:Linux终端文本编辑器Micro
  18. h5广告与html5,那些刷爆朋友圈儿的H5广告大揭秘
  19. 缺陷修改实践——replace函数的运用|思考?
  20. Java 使用 POI 操作 Excel(反射,大数据量)

热门文章

  1. 全球与中国消防系统市场现状及未来发展趋势
  2. 高效率科研神器——小软件、大能量
  3. php控制windows系统关机,window_winXP系统设置一键关机的两种方法,windows系统关机需要三步,对我 - phpStudy...
  4. DDD基础 (实体 值对象)
  5. url请求和ajax请求作用于minui treegrid的区别
  6. 疫情让“灵活用工”浮出水面,作为Android开发的你“灵活用工”了吗?
  7. C. DZY Loves Fibonacci Numbers(线段树fibonacci)
  8. 135微信编辑器html模式,135微信编辑器如何使用 135微信编辑器使用方法教程
  9. 在c 语言里如何制作滑动图片大小,[教程]教你在微信小程序中实现手势缩放图片...
  10. C++ 设计模式 建造者模式(复杂对象的构建与其表示分离)肯德基不同烧鸡的制作过程