• 2022-09-04被罚款200元记6分.
  • 特么的.电脑风扇坏了.快递还全部停发.太难了...求求了.疫情赶紧走吧.
  • 难啊难!要钱难!
  • 更新到WordPress5.6啦
  • 有点伤心了,今年净遇到王某海这种人.
  • 难啊难...
  • 七牛的JS SDK 的文档真坑啊.
  • 蓝奏云分享部分地区无法访问需手动修改www.lanzous.com变为:www.lanzoux.com
  • 好气啊~原来使用的CDN服务商莫名其妙的给我服务取消了~
  • 遇见一个沙雕汽车人.

视频完美切片存储方案 附自动化处理脚本

PHP KIENG 5年前 (2019-12-22) 365581次浏览 已收录 29个吐槽 扫描二维码

视频完美切片存储方案 附自动化处理脚本

声明:本文章只是指出部分网站的 BUG,希望有问题的网站尽快修复!请勿非法操作,出现任何问题与博主无关.

视频储存是很多人的一个难题...自己买个服务器又需要带宽有需要硬盘够大!

看看怎么是一个完美的存储.

开始操作

我也是偶然发现的。把视频切片成 m3u8 之后,视频会变成一段段的 ts 格式的视频。这个时候我想了一下。如果说某些图床又 bug 不验证文件格式,那么是不是就可以把切片视频放在他的服务器上进行播放了?

嘿嘿,没想到真的可以。当当当~ :lol: 他就是某里的“图床”。

这个其实不是什么图床,是某巴客服中一个漏洞,稳定几年了,很多什么图床网站就是用这个接口

有了方案我们就试试吧。

我直接上自动化脚本了:

<?php

$v_path = $argv[1]; //切片路径
$v_name = $argv[2]; //带切片的视频路径名称
$s = 5; //切片秒  ts 切片必须小于 5MB
if (empty($v_path) || empty($v_name)) {
	echo "请填写完整参数";
	exit;
}

if ($v_path == '/' || $v_path == '\\') {
	$v_path = '';
} else {
	mkFolder($v_path);
	$v_path = $v_path . "/";
}
//这是 FFmpeg 处理命令大家自行更改
exec("ffmpeg -i $v_name -c copy -map 0 -f segment -segment_list " . $v_path . "playlist.m3u8 -segment_time $s " . $v_path . "player%03d.ts");

$m = file_get_contents('./' . $v_path . 'playlist.m3u8');

preg_match_all('/player(.*?)\.ts/', $m, $arr);

foreach ($arr[1] as $key => $value) {
	echo "处理第" . $value . '个切片' . "\n";
	$ali = upload('./' . $v_path . 'player' . $value . '.ts');
	$m = str_replace('player' . $value . '.ts', $ali, $m);
	file_put_contents('./' . $v_path . 'play.m3u8', $m);
}

echo "处理完毕" . "\n";
echo "播放链接为:/" . $v_path . 'play.m3u8';

function upload($file) {
	$post['file'] = file_path($file);
	$post['scene'] = 'aeMessageCenterV2ImageRule';
	$post['name'] = 'player.jpg';
	$rel = get_curl('https://kfupload.alibaba.com/mupload', $post, 'iAliexpress/6.22.1 (iPhone; iOS 12.1.2; Scale/2.00)');
	$rel = json_decode($rel, true);

	return $rel['url'];
}

function get_curl($url, $post = 0, $ua = 0) {
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	// 不验证证书
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	// 最大执行时间
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
	curl_setopt($ch, CURLOPT_TIMEOUT, 120);
	$httpheader[] = "Accept:application/json";
	$httpheader[] = "Accept-Encoding:gzip,deflate,sdch";
	$httpheader[] = "Accept-Language:zh-CN,zh;q=0.8";
	$httpheader[] = "Connection:close";
	$ip = mt_rand(48, 140) . "." . mt_rand(10, 240) . "." . mt_rand(10, 240) . "." . mt_rand(10, 240); //随机 ip
	$httpheader[] = 'CLIENT-IP:' . $ip;
	$httpheader[] = 'X-FORWARDED-FOR:' . $ip;
	curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
	if ($post) {
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
	}

	if ($ua) {
		curl_setopt($ch, CURLOPT_USERAGENT, $ua);
	} else {
		curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Linux; U; Android 4.0.4; es-mx; HTC_One_X Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0");
	}
	curl_setopt($ch, CURLOPT_ENCODING, "gzip");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	$ret = curl_exec($ch);
	curl_close($ch);
	return $ret;
}
function mkFolder($path) {
	if (!is_readable($path)) {
		is_file($path) or mkdir($path, 0700);
	}
}
function file_path($file) {
	if (class_exists('CURLFile')) {
		return $post['file'] = new \CURLFile(realpath($file));
	} else {
		return $post['file'] = '@' . realpath($file);
	}
}

把这个另存为 m3u8.php(什么名都成!这个就随便命名一下)
运行命令:
php m3u8.php 视频的储存路径 视频完整路径
如:
php m3u8.php mp4 wwwroot/test/test.mp4
视频完美切片存储方案 附自动化处理脚本
视频完美切片存储方案 附自动化处理脚本
视频完美切片存储方案 附自动化处理脚本

注意:这个接口只能上次小于 5MB 以下的图片(视频切片)所以切片完文件大小必须小于 5MB,其他的自己看代码就能懂,其实没啥.

测试视频:


KIENG.CN , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA 4.0协议进行授权
转载请注明出处:视频完美切片存储方案 附自动化处理脚本
本文章链接:https://blog.kieng.cn/1844.html
喜欢 (71)
KIENG
关于作者:
一个热衷网络的Man
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 快速获取昵称
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(29)个小伙伴在吐槽
  1. 大佬六六六。。。
    dforel | 中国江苏苏州市 电信2019-12-22 19:28 回复 Windows 10 | Chrome 79.0.3945.88
  2. php m3u8.php mp4 wwwroot/test/test.mp4前一个mp4是指的视频格式 后面的是指视频存放的路径吧?
    寒夜方舟 | 中国江苏苏州市 电信2019-12-22 20:20 回复 Windows 10 | Chrome 79.0.3945.88
    • KIENG
      那个是文件的储存路径 把切片文件储存在 /mp4/切片文件.ts 这个意思
      KIENG2019-12-22 20:46 回复 Windows 10 | Chrome 79.0.3945.79
  3. 大佬 这个借口在哪里找的, 我用易语言写一个自动处理的程序
    熊猫 | 中国江苏苏州市 电信2019-12-22 20:45 回复 Windows 7 | 搜狗浏览器.X
    • KIENG
      那个PHP处理脚本里有啊 你看看
      KIENG2019-12-22 20:53 回复 Windows 10 | Chrome 79.0.3945.79
    • OK可以
      熊猫 | 中国江苏苏州市 电信2019-12-22 20:56 回复 Windows 7 | 搜狗浏览器.X
  4. 搞定了,谢谢博主
    寒夜方舟 | 中国江苏苏州市 电信2019-12-23 01:04 回复 Windows 10 | Chrome 79.0.3945.88
  5. 求问 wp 用什么方法播放 m3u8 视频呢 试了几个插件,只是手机端可以播放,电脑端就黑屏了
    yu yan | 中国江苏苏州市 电信2019-12-23 13:26 回复 Windows 10 | Chrome 76.0.3809.87
    • 大佬,图片上传的包在哪里抓的, 我易语言写的时候有点问题, 我要重新抓一下包
      熊猫 | 中国江苏苏州市 电信2019-12-23 13:44 回复 Windows 10 | 搜狗浏览器.X
  6. 这个post 的数据转换成易语言怎么试都不行,博主您那有原始的抓包数据吗
    熊猫 | 中国江苏苏州市 电信2019-12-23 16:57 回复 Windows 10 | 搜狗浏览器.X
  7. 大佬牛逼,会玩,可以转载么?
    Quanyin | 中国江苏苏州市 电信2019-12-23 18:19 回复 Windows 10 | Chrome 78.0.3904.108
  8. 能按大小切片就好了。
    心灵博客 | 中国江苏苏州市 电信2019-12-26 20:22 回复 Mac OS X | Chrome 75.0.3770.80
  9. 请问怎么解决跨域,
    神秘人865奥本 | 中国江苏苏州市 电信2020-01-19 00:44 回复 Windows 10 | Chrome 79.0.3945.88
  10. 为什么在浏览器不能正 常执行呢..上传那里 不能返回阿里地址.用命令行执行是正常的
    神秘人726 | 中国江苏苏州市 电信2020-02-01 03:46 回复 Windows 10 | Chrome 78.0.3904.108
  11. 现在是调整到正常了.但有个问题 切成3000文件 好像只能上传一半就503出错.如果切大点 只有300多个就正常那个最大执行时间调整成3000了.大佬能指导一下吗?
    ������인q�� | 中国江苏苏州市 电信2020-02-01 15:47 回复 Windows 10 | Chrome 78.0.3904.108
  12. 友情提示, 第18行的命令不太友好哦~!会丢帧,不信的朋友可以测试下~!
    btjson | 中国江苏苏州市 电信2020-02-10 13:24 回复 Windows 7 | Chrome 77.0.3865.90
    • 我自己测试的情况是,丢帧应该是文件大于5mb的情况下会丢帧,博主把源码共享出来以后很不错了,自己要排查问题
      牛逼plus | 中国江苏苏州市 电信2020-02-11 18:44 回复 Windows 10 | Chrome 76.0.3809.132
  13. 大佬,发现一个新问题,就是php文件里面那个控制秒数的没有用,导致跟多文件都大于5MB
    牛逼plus | 中国江苏苏州市 电信2020-02-11 22:43 回复 Windows 10 | Chrome 76.0.3809.132
  14. 看看
    clon | 中国江苏苏州市 电信2020-02-12 15:43 回复 Mac OS X | Chrome 80.0.3987.87
  15. 麻烦问一下博主,切片的时候提示下面这个有解决方法吗H.264 bitstream malformed, no startcode found, use the video bitstream filter 'h264_mp4toannexb' to fix it ('-bsf:v h264_mp4toannexb' option with ffmpeg)av_interleaved_write_frame(): Invalid data found when processing input
    明月清风 | 中国江苏苏州市 电信2020-02-23 09:50 回复 Windows 10 | Chrome 69.0.3947.100
    • KIENG
      我这只是个思路而已.我没有进行过多的测试.可能会有很多的问题.希望您自己改改学习一下吧
      KIENG2020-02-23 16:07 回复 Windows 10 | Chrome 70.0.3538.25
  16. ffmpeg至少需要VPS吧?
    荔乡根子genzi.win | 中国江苏苏州市 电信2020-03-07 12:42 回复 Windows 7 | Chrome 80.0.3987.132
    • KIENG
      win也有ffmpeg啊.
      KIENG2020-03-07 15:59 回复 Windows 10 | Chrome 70.0.3538.25
  17. 4月11凉凉阿里验证图片格式
    mmp | 中国江苏苏州市 电信2020-04-11 14:17 回复 Linux | Chrome 62.0.3202.84
    • 好像不行了....
      绯酒 | 中国江苏苏州市 电信2020-04-16 21:05 回复 Windows 10 | Chrome 81.0.4044.92
  18. 凉凉了
    贤王222 | 中国江苏苏州市 电信2020-04-11 21:37 回复 Linux | Chrome 62.0.3202.84
  19. 最近看他们是某微盘
    MicroCat | 中国江苏苏州市 电信2020-04-12 17:37 回复 Linux | Chrome 62.0.3202.84
  20. 等待dalao的更新
    绯酒 | 中国江苏苏州市 电信2020-04-18 02:30 回复 Windows 10 | Chrome 81.0.4044.92
  21. 你大概不知道这招在ios行不通吧
    799 | 中国四川达州市 电信2020-05-09 21:11 回复 Windows 10 | Chrome 78.0.3904.108