当前位置:首页 > WEB > 正文内容

PHP 离线下载M3U8等其他格式合成Mp4 依赖FFMPEG

chanra1n5年前 (2020-02-12)WEB4580
//各位大哥能不能讲点武德?转载就转载了,你留个源网址行不行?
//Myfpga 版权所有
<?php
$url= $_GET["url"];
$name = $_GET["name"];
$web = $_GET["web"];
$psw = $_GET["psw"];
$dir = getcwd().'/movies/'; #获取Movies目录
#获取参数
$timenow = date('YmdHis');#获取现在时间

if(empty($name))#如果没有指定文件名,则以时间命名
{
    $name = $timenow;
}

if(!empty($url)) #如果输入了视频地址,则直接下载转码
{
    $cmd = 'cd '.$dir.' && ffmpeg -i '.$url.'  -vcodec copy -acodec copy -absf aac_adtstoasc '.$name.'.mp4';
}
elseif(!empty($name))#输入了网页,则解析视频地址
{
    $info=file_get_contents($web);
    preg_match('/[a-zA-z]+:[^\s]*(\.webm|\.m3u8|\.avi)/', $info, $demin);
    if(!empty($demin[0])) #如果成功获取了视频地址
    {
        $cmd = 'cd '.$dir.' && ffmpeg -i '.$demin[0].'  -vcodec copy -acodec copy -absf aac_adtstoasc '.$name.'.mp4';
    }
    else #如果没有获取地址则返回404
    {
        header('HTTP/1.1 404 Not Found');
        header("status: 404 Not Found");
    }
}
if(empty($psw)) #如果输入了视频地址,则直接下载转码
{
    $psw = 123456;
}
$jiami = '&&zip -mD --password '.$psw.' '.$timenow.' '.$name.'.mp4'; #对下载的视频压缩加密
$cmd=$cmd.$jiami;
if(!empty($url)||!empty($web)){
shell_exec($cmd); #开始下载
$file_dir = $dir;
$file_name = $timenow.'.zip';
if (! file_exists ( $file_dir . $file_name )) {    
    header('HTTP/1.1 404 NOT FOUND');  
} else {    
    //以只读和二进制模式打开文件   
    $file = fopen ( $file_dir . $file_name, "rb" ); 
    //告诉浏览器这是一个文件流格式的文件    
    Header ( "Content-type: application/octet-stream" ); 
    //请求范围的度量单位  
    Header ( "Accept-Ranges: bytes" );  
    //Content-Length是指定包含于请求或响应中数据的字节长度    
    Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );  
    //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
    Header ( "Content-Disposition: attachment; filename=" . $file_name );    
    //读取文件内容并直接输出到浏览器    
    echo fread ( $file, filesize ( $file_dir . $file_name ) );    
    fclose ( $file );    
    exit ();    
} 
}
else{
header('HTTP/1.1 404 Not Found');
header("status: 404 Not Found");
}
exit; 
?>

请根据提示的报错信息,前往PHP的config修改放行相关函数,如

shell_exec

请修改流内存限制,否则默认的是60Mb,导致下载失败,也可以自行修改代码,不使用流的方式发送文件,改成

header('Location: ./movies/'.$timenow.'.zip');


扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:https://myfpga.cn/index.php/post/128.html

分享给朋友:

“PHP 离线下载M3U8等其他格式合成Mp4 依赖FFMPEG” 的相关文章

简单的PHP获取URL值

简单的PHP获取URL值

<?PHP $mac = $_GET["mac"]; echo $mac; ?>可以使用网址?mac=1来访问url...

OPENWRT根据连接设备MAC实现WIFI打卡、签到(基于PHP)

OPENWRT根据连接设备MAC实现WIFI打卡、签到(基于PHP)

<?php print("<table border=\"1\">");             ...

(原创)AWVS逆向API设计的批量提交控制网页 基于PHP设计

(原创)AWVS逆向API设计的批量提交控制网页 基于PHP设计

这段代码是一个简单的HTML和PHP混合的网页应用程序,用于管理和控制MyFPGA-Safe系统的一些功能。以下是对代码的分析:HTML结构:<!DOCTYPE html>:HTML5文档类型声明。<html>:HTML文档的根元素。<head>:包含页面的元信息...

(原创)使用控制台命令去除CSDN中无关打印的部分,只打印正文,导出PDF

(原创)使用控制台命令去除CSDN中无关打印的部分,只打印正文,导出PDF

对于任意的CSDN文章页面,例如:我们按下F12按键,然后切换至控制台输入命令:(function(){     'use strict';         ...