首页 后端开发 php教程 一个FFMPEG视频转换的PHP类

一个FFMPEG视频转换的PHP类

Jul 28, 2016 am 08:26 AM
ftp server this

<?php class local_video
{
    public $options;
    public $ffmpeg;
    public $phpcms_path;
    public $backup;
    function __construct($options,$ffmpeg,$backup=true)
    {
        $this->opti
        $this->options = array_filter($options) + $this->options;
        $this->ffmpeg=$ffmpeg;	//ffmpeg路径
        $this->backup=$backup;
    }
    //获取视频信息
    function video_info($file)
    {
        ob_start();
        passthru(sprintf($this->ffmpeg . ' -i "%s" 2>&1', $file));//ffmpeg -i test.avi 2>&1
        $info = ob_get_contents();
        ob_end_clean();
        // 通过使用输出缓冲,获取到ffmpeg所有输出的内容。
        $ret  = array();
        // Duration: 01:24:12.73, start: 0.000000, bitrate: 456 kb/s
        if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/",$info, $match))
        {
            $ret['duration'] = $match[1]; // 提取出播放时间
            $da              = explode(':', $match[1]);
            $ret['seconds']  = $da[0] * 3600 + $da[1] * 60 + $da[2]; // 转换为秒
            $ret['start']    = $match[2]; // 开始时间
            $ret['bitrate']  = $match[3]; // bitrate 码率 单位 kb
        }
        // Stream #0.1: Video: rv40, yuv420p, 512x384, 355 kb/s, 12.05 fps, 12 tbr, 1k tbn, 12 tbc
        if (preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $info, $match))
        {
            $ret['vcodec']     = $match[1]; // 编码格式
            $ret['vformat']    = $match[2]; // 视频格式
            $ret['resolution'] = $match[3]; // 分辨率
            $a                 = explode('x', $match[3]);
            $ret['width']      = $a[0];
            $ret['height']     = $a[1];
        }
        // Stream #0.0: Audio: cook, 44100 Hz, stereo, s16, 96 kb/s
        if (preg_match("/Audio: (\w*), (\d*) Hz/", $info, $match))
        {
            $ret['acodec']      = $match[1];       // 音频编码
            $ret['asamplerate'] = $match[2];  // 音频采样频率
        }
        if (isset($ret['seconds']) && isset($ret['start']))
        {
            $ret['play_time'] = $ret['seconds'] + $ret['start']; // 实际播放时间
        }
        $ret['size'] = filesize($file); // 文件大小
        return $ret;
    }
    function convert()
    {
        $verifyToken = md5('unique_salt' . $this->options['timestamp']);
        if ($verifyToken == $this->options['token'])
        {
            $orgFile  = $this->options['org_path'] . $this->options['org'];
            $setting=' ';
            if(isset($this->options['video_size']))
                $setting=$setting.'-vf scale="'.$this->options['video_size'].'"';
            $mp4      = $this->ffmpeg . ' -i  '  . $orgFile . ' -ss 00:01:02 -vcodec libx264 -strict -2 '.$setting.' ' . $this->options['mp4_path_temp'] . $this->options['org'] . '';	//转换视频
            exec($mp4);
            if(isset($this->options['watermark'])){
            	$watermark=' "'.$this->options['watermark'].'" ';
            	$mp4 = $this->ffmpeg.' -i '.$this->options['mp4_path_temp'] . $this->options['org'] . ''.' -vf '.$watermark.' '.$this->options['mp4_path'] . $this->options['org'] . '';	//增加水印
            	exec($mp4);
            	@unlink($this->options['mp4_path_temp'] . $this->options['org'] . '');
            }
            $duration = $this->video_info($orgFile);
            $seconds  = intval($duration['seconds']);
            $offset   = intval($seconds / 21);	//截图间隔 秒
            $thumbs = explode(',', $this->options['thumb_size']);
            for ($i = 0; $i options['thumb_path'] . $this->options['org'] . '/';
                if (!file_exists($targetPath))
                    @mkdir(rtrim($targetPath, '/'), 0777);
                if ($i == 0)
                {
                    $time     = 1;
                    $name     = $i == 0 ? 'default.jpg' : $i . '.jpg';
                    $img_size = $this->options['main_size'];
                }
                else
                {
	                $time       = $i * $offset;
	                $name       = $i . '.jpg';
	                $img_size   = $thumbs[$i-1];
                }
                $jpg = $this->ffmpeg . ' -i  ' . $orgFile . ' -f  image2  -ss ' . $time . ' -vframes 1  -s ' . $img_size . ' ' . $targetPath . $name;	//截图
                @exec($jpg);
            }
            //复制文件到对应的FTP服务器
            $ftp_server    = pc_base::load_config('ftp_server');
            $remote_server = $_POST['remote_server'];
            $ftp_server    = $ftp_server[$remote_server];
            if($ftp_server['ftp_server'])
                pc_base::ftp_upload($orgFile,
                                $ftp_server['ftp_server'],
                                $ftp_server['ftp_user_name'],
                                $ftp_server['ftp_user_pass']);
            //备份到所有FTP服务器
            if($this->backup){
                $ftp_backup = pc_base::load_config('ftp_backup');
                foreach ($ftp_backup as $v)
                {
                    pc_base::ftp_upload( $orgFile,
                                        $ftp_backup['ftp_server'],
                                        $ftp_backup['ftp_user_name'],
                                        $ftp_backup['ftp_user_pass']);
                }
            }
            $result['url']=$ftp_server['ftp_server']['http_address']. $this->options['mp4_path'] . $this->options['uniqid'] . '.mp4';//记录视频播放地址
            $result['uniqid']=$this->options['uniqid'];
            $result['videoTime'] = $this->video_info($orgFile);
            $result['videoTime'] = $result['videoTime']['seconds'];
            return $result;//返回处理结果
        }
        else
            die('验证失败!');
    }
}
?>
登录后复制

参考

http://www.fieryrain.com/blog/FFMPEG_VIDEO_TIME

http://keren.iteye.com/blog/1773536

http://www.cnblogs.com/dwdxdy/p/3240167.html

http://www.cnblogs.com/chen1987lei/archive/2010/12/03/1895242.html

以上就介绍了 一个FFMPEG视频转换的PHP类,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

nginx反向代理ftp服务器怎么搭建 nginx反向代理ftp服务器怎么搭建 May 17, 2023 am 09:31 AM

1.安装nginx2.安装vsftpd3.修改nginx的配置文件nginx.conf  3.1首行添加ftp的用户  userftpuser;  3.2配置相关路径  server{    listen80;  #nginx代理的端口    server_namelocalhost;  #ftp服务器的地址    location/images{      root/home/ftpuser;  #代理ftp服务器的文件夹的绝对路径    indexftpuser;    #设置欢迎页    

在Go语言中使用FTP:完整指南 在Go语言中使用FTP:完整指南 Jun 17, 2023 pm 06:31 PM

随着互联网的快速发展,文件传输协议(FTP)一直是一种重要的文件传送方式。在Go语言中,使用FTP传输文件可能是很多开发人员的需求。然而,也许很多人并不知道如何在Go语言中使用FTP。在本篇文章中,我们将探讨如何在Go语言中使用FTP,从连接FTP服务器到文件传输,以及如何处理错误和异常。创建FTP连接在Go语言中,我们可以使用标准的"net"包来连接FTP

linux下 ftp命令有哪些 linux下 ftp命令有哪些 Mar 21, 2023 am 09:59 AM

linux下ftp命令有:1、ftp命令;2、close命令;3、disconnect命令;4、open命令;5、user命令;6、account命令;7、bye命令;8、quit命令;9、help命令;10、rhelp命令;11、ascii命令;12、binary/bi命令;13、bell命令等。

PHP与FTP:在网站开发中实现多个部门的文件共享 PHP与FTP:在网站开发中实现多个部门的文件共享 Jul 28, 2023 pm 01:01 PM

PHP与FTP:在网站开发中实现多个部门的文件共享随着互联网的发展,越来越多的企业开始借助网站平台进行信息发布和业务推广。然而,随之而来的问题是如何实现多个部门之间的文件共享和协作。在这种情况下,PHP和FTP成为了最常用的解决方案之一。本文将介绍如何利用PHP和FTP在网站开发中实现多个部门的文件共享。一、FTP介绍FTP(FileTransferPr

如何通过PHP在FTP服务器上进行目录和文件的比较 如何通过PHP在FTP服务器上进行目录和文件的比较 Jul 28, 2023 pm 02:09 PM

如何通过PHP在FTP服务器上进行目录和文件的比较在web开发中,有时候我们需要比较本地文件与FTP服务器上的文件,以确保两者之间的一致性。PHP提供了一些函数和类来实现这个功能。本文将介绍如何使用PHP在FTP服务器上进行目录和文件的比较,并提供相关的代码示例。首先,我们需要连接到FTP服务器。PHP提供了ftp_connect()函数来建立与FTP服务器

如何安装、卸载、重置Windows服务器备份 如何安装、卸载、重置Windows服务器备份 Mar 06, 2024 am 10:37 AM

WindowsServerBackup是WindowsServer操作系统自带的一个功能,旨在帮助用户保护重要数据和系统配置,并为中小型和企业级企业提供完整的备份和恢复解决方案。只有运行Server2022及更高版本的用户才能使用这一功能。在本文中,我们将介绍如何安装、卸载或重置WindowsServerBackup。如何重置Windows服务器备份如果您的服务器备份遇到问题,备份所需时间过长,或无法访问已存储的文件,那么您可以考虑重新设置WindowsServer备份设置。要重置Windows

linux ftp 530什么意思 linux ftp 530什么意思 Mar 14, 2023 am 10:16 AM

linux ftp530的意思是linux ftp登录报错530,其解决办法:1、​查看“cat /etc/shells”是否有你用户的主目录和登录shell,若是没有,则进行添加;2、查看“/var/log/secure”文件,重新设置密码过期时间即可。

Python怎么使用FTP上传文件 Python怎么使用FTP上传文件 Apr 29, 2023 am 09:49 AM

FTP简介FTP即文件传输协议(FileTransferProtocol),是用于在网络上进行文件传输的一种标准协议。FTP客户端可以将文件从本地上传到服务器或从服务器下载到本地。ftplib模块Python提供了一个标准库ftplib,用于在Python中实现FTP客户端的功能。使用ftplib,我们可以连接到FTP服务器,执行各种FTP操作,如上传和下载文件等。代码解释下面是一个使用Python通过FTP上传文件的示例代码:fromftplibimportFTPimportargparsed

See all articles