Heim Backend-Entwicklung PHP-Tutorial 一个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-&gt;options = array_filter($options) + $this-&gt;options;
        $this-&gt;ffmpeg=$ffmpeg;	//ffmpeg路径
        $this-&gt;backup=$backup;
    }
    //获取视频信息
    function video_info($file)
    {
        ob_start();
        passthru(sprintf($this-&gt;ffmpeg . ' -i "%s" 2&gt;&amp;1', $file));//ffmpeg -i test.avi 2&gt;&amp;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']) &amp;&amp; isset($ret['start']))
        {
            $ret['play_time'] = $ret['seconds'] + $ret['start']; // 实际播放时间
        }
        $ret['size'] = filesize($file); // 文件大小
        return $ret;
    }
    function convert()
    {
        $verifyToken = md5('unique_salt' . $this-&gt;options['timestamp']);
        if ($verifyToken == $this-&gt;options['token'])
        {
            $orgFile  = $this-&gt;options['org_path'] . $this-&gt;options['org'];
            $setting=' ';
            if(isset($this-&gt;options['video_size']))
                $setting=$setting.'-vf scale="'.$this-&gt;options['video_size'].'"';
            $mp4      = $this-&gt;ffmpeg . ' -i  '  . $orgFile . ' -ss 00:01:02 -vcodec libx264 -strict -2 '.$setting.' ' . $this-&gt;options['mp4_path_temp'] . $this-&gt;options['org'] . '';	//转换视频
            exec($mp4);
            if(isset($this-&gt;options['watermark'])){
            	$watermark=' "'.$this-&gt;options['watermark'].'" ';
            	$mp4 = $this-&gt;ffmpeg.' -i '.$this-&gt;options['mp4_path_temp'] . $this-&gt;options['org'] . ''.' -vf '.$watermark.' '.$this-&gt;options['mp4_path'] . $this-&gt;options['org'] . '';	//增加水印
            	exec($mp4);
            	@unlink($this-&gt;options['mp4_path_temp'] . $this-&gt;options['org'] . '');
            }
            $duration = $this-&gt;video_info($orgFile);
            $seconds  = intval($duration['seconds']);
            $offset   = intval($seconds / 21);	//截图间隔 秒
            $thumbs = explode(',', $this-&gt;options['thumb_size']);
            for ($i = 0; $i options['thumb_path'] . $this-&gt;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-&gt;options['main_size'];
                }
                else
                {
	                $time       = $i * $offset;
	                $name       = $i . '.jpg';
	                $img_size   = $thumbs[$i-1];
                }
                $jpg = $this-&gt;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-&gt;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-&gt;options['mp4_path'] . $this-&gt;options['uniqid'] . '.mp4';//记录视频播放地址
            $result['uniqid']=$this-&gt;options['uniqid'];
            $result['videoTime'] = $this-&gt;video_info($orgFile);
            $result['videoTime'] = $result['videoTime']['seconds'];
            return $result;//返回处理结果
        }
        else
            die('验证失败!');
    }
}
?&gt;
Nach dem Login kopieren

参考

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教程有兴趣的朋友有所帮助。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So richten Sie den Nginx-Reverse-Proxy-FTP-Server ein So richten Sie den Nginx-Reverse-Proxy-FTP-Server ein May 17, 2023 am 09:31 AM

So richten Sie den Nginx-Reverse-Proxy-FTP-Server ein

FTP in Go verwenden: Eine vollständige Anleitung FTP in Go verwenden: Eine vollständige Anleitung Jun 17, 2023 pm 06:31 PM

FTP in Go verwenden: Eine vollständige Anleitung

Was sind die FTP-Befehle unter Linux? Was sind die FTP-Befehle unter Linux? Mar 21, 2023 am 09:59 AM

Was sind die FTP-Befehle unter Linux?

PHP und FTP: Realisierung der Dateifreigabe zwischen mehreren Abteilungen bei der Website-Entwicklung PHP und FTP: Realisierung der Dateifreigabe zwischen mehreren Abteilungen bei der Website-Entwicklung Jul 28, 2023 pm 01:01 PM

PHP und FTP: Realisierung der Dateifreigabe zwischen mehreren Abteilungen bei der Website-Entwicklung

Anleitung zum Installieren, Deinstallieren und Zurücksetzen des Windows-Server-Backups Anleitung zum Installieren, Deinstallieren und Zurücksetzen des Windows-Server-Backups Mar 06, 2024 am 10:37 AM

Anleitung zum Installieren, Deinstallieren und Zurücksetzen des Windows-Server-Backups

So verwenden Sie FTP zum Hochladen von Dateien in Python So verwenden Sie FTP zum Hochladen von Dateien in Python Apr 29, 2023 am 09:49 AM

So verwenden Sie FTP zum Hochladen von Dateien in Python

So vergleichen Sie Verzeichnisse und Dateien auf einem FTP-Server über PHP So vergleichen Sie Verzeichnisse und Dateien auf einem FTP-Server über PHP Jul 28, 2023 pm 02:09 PM

So vergleichen Sie Verzeichnisse und Dateien auf einem FTP-Server über PHP

Was bedeutet Linux FTP 530? Was bedeutet Linux FTP 530? Mar 14, 2023 am 10:16 AM

Was bedeutet Linux FTP 530?

See all articles