首頁 後端開發 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 <= count($thumbs); $i++)
            {
                $targetPath = $this->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://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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 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)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1273
29
C# 教程
1252
24
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;   站的代理伺服器的連接埠;    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

PHP與FTP:在網站開發中實現多個部門的檔案共享 PHP與FTP:在網站開發中實現多個部門的檔案共享 Jul 28, 2023 pm 01:01 PM

PHP與FTP:在網站開發中實現多個部門的文件共享隨著互聯網的發展,越來越多的企業開始借助網站平台進行資訊發布和業務推廣。然而,隨之而來的問題是如何實現多個部門之間的文件共享和協作。在這種情況下,PHP和FTP成為了最常用的解決方案之一。本文將介紹如何利用PHP和FTP在網站開發中實現多個部門的檔案分享。一、FTP介紹FTP(FileTransferPr

如何安裝、解除安裝、重設Windows伺服器備份 如何安裝、解除安裝、重設Windows伺服器備份 Mar 06, 2024 am 10:37 AM

WindowsServerBackup是WindowsServer作業系統自帶的功能,旨在協助使用者保護重要資料和系統配置,並為中小型和企業級企業提供完整的備份和復原解決方案。只有執行Server2022及更高版本的使用者才能使用此功能。在本文中,我們將介紹如何安裝、解除安裝或重設WindowsServerBackup。如何重置Windows伺服器備份如果您的伺服器備份遇到問題,備份所需時間過長,或無法存取已儲存的文件,那麼您可以考慮重新設定WindowsServer備份設定。要重設Windows

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命令等。

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」文件,重新設定密碼過期時間即可。

如何用PHP實作FTP檔案上傳進度條 如何用PHP實作FTP檔案上傳進度條 Jul 30, 2023 pm 06:51 PM

如何用PHP實作FTP檔案上傳進度條一、背景介紹在網站開發中,檔案上傳是常見的功能。而對於大檔案的上傳,為了提高使用者體驗,我們常常需要向使用者顯示一個上傳進度條,讓使用者知道檔案上傳的進程。本文將介紹如何使用PHP實作FTP檔案上傳進度條的功能。二、FTP檔案上傳進度條的實現方法基本思路FTP檔案上傳的進度條實現,通常是透過計算上傳的檔案大小和已上傳檔案大小

如何透過PHP在FTP伺服器上進行目錄和檔案的比較 如何透過PHP在FTP伺服器上進行目錄和檔案的比較 Jul 28, 2023 pm 02:09 PM

如何透過PHP在FTP伺服器上進行目錄和文件的比較在web開發中,有時候我們需要比較本地文件與FTP伺服器上的文件,以確保兩者之間的一致性。 PHP提供了一些函數和類別來實作這個功能。本文將介紹如何使用PHP在FTP伺服器上進行目錄和檔案的比較,並提供相關的程式碼範例。首先,我們需要連接到FTP伺服器。 PHP提供了ftp_connect()函數來建立與FTP伺服器

See all articles