Rumah pembangunan bahagian belakang tutorial 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('验证失败!');
    }
}
?>
Salin selepas log masuk

参考

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyediakan pelayan ftp proksi terbalik nginx Bagaimana untuk menyediakan pelayan ftp proksi terbalik nginx May 17, 2023 am 09:31 AM

1. Pasang nginx 2. Pasang vsftpd 3. Ubah suai fail konfigurasi nginx nginx.conf 3.1 Tambah pengguna ftp userftpuser dalam baris pertama 3.2 Konfigurasi pelayan laluan yang berkaitan { listen80; images{ root /home/ftpuser; #Laluan mutlak folder ftp server indexftpuser proksi #Tetapkan halaman selamat datang

Menggunakan FTP dalam Go: Panduan Lengkap Menggunakan FTP dalam Go: Panduan Lengkap Jun 17, 2023 pm 06:31 PM

Dengan perkembangan pesat Internet, File Transfer Protocol (FTP) sentiasa menjadi kaedah pemindahan fail yang penting. Dalam bahasa Go, menggunakan FTP untuk memindahkan fail mungkin memerlukan banyak pembangun. Namun, mungkin ramai yang tidak tahu cara menggunakan FTP dalam bahasa Go. Dalam artikel ini, kami akan meneroka cara menggunakan FTP dalam bahasa Go, daripada menyambung ke pelayan FTP kepada pemindahan fail dan cara mengendalikan ralat dan pengecualian. Cipta sambungan FTP Dalam bahasa Go, kita boleh menggunakan pakej "bersih" standard untuk menyambung ke FTP

Apakah arahan ftp di bawah linux? Apakah arahan ftp di bawah linux? Mar 21, 2023 am 09:59 AM

Perintah ftp di bawah Linux termasuk: 1. perintah ftp; 3. perintah putuskan sambungan; perintah ;10. perintah rhelp; 11. perintah ascii

PHP dan FTP: merealisasikan perkongsian fail antara pelbagai jabatan dalam pembangunan laman web PHP dan FTP: merealisasikan perkongsian fail antara pelbagai jabatan dalam pembangunan laman web Jul 28, 2023 pm 01:01 PM

PHP dan FTP: Mencapai perkongsian fail antara pelbagai jabatan dalam pembangunan laman web Dengan perkembangan Internet, semakin banyak syarikat mula menggunakan platform laman web untuk pengeluaran maklumat dan promosi perniagaan. Namun, masalah yang timbul ialah bagaimana untuk mencapai perkongsian fail dan kerjasama antara pelbagai jabatan. Dalam kes ini, PHP dan FTP menjadi salah satu penyelesaian yang paling biasa digunakan. Artikel ini akan memperkenalkan cara menggunakan PHP dan FTP untuk mencapai perkongsian fail antara pelbagai jabatan dalam pembangunan laman web. 1. Pengenalan kepada FTP FTP (FileTransferPr

Bagaimana untuk membandingkan direktori dan fail pada pelayan FTP melalui PHP Bagaimana untuk membandingkan direktori dan fail pada pelayan FTP melalui PHP Jul 28, 2023 pm 02:09 PM

Bagaimana untuk membandingkan direktori dan fail pada pelayan FTP melalui PHP Dalam pembangunan web, kadangkala kita perlu membandingkan fail tempatan dengan fail pada pelayan FTP untuk memastikan konsistensi antara kedua-duanya. PHP menyediakan beberapa fungsi dan kelas untuk melaksanakan fungsi ini. Artikel ini akan memperkenalkan cara menggunakan PHP untuk membandingkan direktori dan fail pada pelayan FTP, dan memberikan contoh kod yang berkaitan. Pertama, kita perlu menyambung ke pelayan FTP. PHP menyediakan fungsi ftp_connect() untuk mewujudkan pelayan FTP

Cara memasang, menyahpasang dan menetapkan semula sandaran pelayan Windows Cara memasang, menyahpasang dan menetapkan semula sandaran pelayan Windows Mar 06, 2024 am 10:37 AM

WindowsServerBackup ialah fungsi yang disertakan dengan sistem pengendalian WindowsServer, direka untuk membantu pengguna melindungi data penting dan konfigurasi sistem, serta menyediakan penyelesaian sandaran dan pemulihan yang lengkap untuk perusahaan peringkat kecil, sederhana dan perusahaan. Hanya pengguna yang menjalankan Server2022 dan lebih tinggi boleh menggunakan ciri ini. Dalam artikel ini, kami akan menerangkan cara memasang, menyahpasang atau menetapkan semula WindowsServerBackup. Cara Menetapkan Semula Sandaran Pelayan Windows Jika anda mengalami masalah dengan sandaran pelayan anda, sandaran mengambil masa terlalu lama, atau anda tidak dapat mengakses fail yang disimpan, maka anda boleh mempertimbangkan untuk menetapkan semula tetapan sandaran Pelayan Windows anda. Untuk menetapkan semula Windows

Apakah maksud linux ftp 530? Apakah maksud linux ftp 530? Mar 14, 2023 am 10:16 AM

linux ftp530 bermaksud ralat log masuk linux ftp 530. Penyelesaiannya ialah: 1. Semak "cat /etc/shells" untuk melihat sama ada direktori utama pengguna anda dan shell log masuk. Jika tidak, tambahkan "/var /log /secure" dan tetapkan semula masa tamat tempoh kata laluan.

Cara menggunakan FTP untuk memuat naik fail dalam Python Cara menggunakan FTP untuk memuat naik fail dalam Python Apr 29, 2023 am 09:49 AM

Pengenalan kepada FTP FTP ialah File Transfer Protocol (FileTransferProtocol), yang merupakan protokol standard untuk pemindahan fail pada rangkaian. Pelanggan FTP boleh memuat naik fail dari tempatan ke pelayan atau memuat turun dari pelayan ke tempatan. Modul ftplib Python menyediakan perpustakaan standard ftplib untuk melaksanakan fungsi klien FTP dalam Python. Menggunakan ftplib, kami boleh menyambung ke pelayan FTP dan melakukan pelbagai operasi FTP, seperti memuat naik dan memuat turun fail, dsb. Penjelasan kod Berikut ialah contoh kod untuk memuat naik fail melalui FTP menggunakan Python: fromftplibimportFTPimportargparsed

See all articles