Maison développement back-end tutoriel 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('验证失败!');
    }
}
?>
Copier après la connexion

参考

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment configurer le serveur FTP proxy inverse nginx Comment configurer le serveur FTP proxy inverse nginx May 17, 2023 am 09:31 AM

1. Installez nginx 2. Installez vsftpd 3. Modifiez le fichier de configuration nginx nginx.conf 3.1 Ajoutez l'utilisateur ftp userftpuser dans la première ligne ; 3.2 Configurez le chemin d'accès correspondant au serveur{ Listen80 ; #nginx proxy port server_namelocalhost ; images{ root /home/ftpuser; #Le chemin absolu du dossier du serveur proxy ftp indexftpuser #Définir la page d'accueil;

Utiliser FTP dans Go : un guide complet Utiliser FTP dans Go : un guide complet Jun 17, 2023 pm 06:31 PM

Avec le développement rapide d'Internet, le protocole de transfert de fichiers (FTP) a toujours été une méthode de transfert de fichiers importante. En langage Go, l'utilisation de FTP pour transférer des fichiers peut être un besoin pour de nombreux développeurs. Cependant, peut-être que beaucoup de gens ne savent pas comment utiliser FTP en langage Go. Dans cet article, nous explorerons comment utiliser FTP en langage Go, de la connexion au serveur FTP au transfert de fichiers, et comment gérer les erreurs et les exceptions. Créer une connexion FTP En langage Go, on peut utiliser le package standard "net" pour se connecter à FTP

Quelles sont les commandes ftp sous Linux ? Quelles sont les commandes ftp sous Linux ? Mar 21, 2023 am 09:59 AM

Les commandes ftp sous Linux incluent : 1. commande ftp ; 2. commande close ; 3. commande open ; 5. commande user ; 7. commande bye ; commande ; 10. commande rhelp ; 11. commande ascii ; 12. commande binaire/bi 13. commande bell ;

PHP et FTP : réaliser le partage de fichiers entre plusieurs départements lors du développement de sites Web PHP et FTP : réaliser le partage de fichiers entre plusieurs départements lors du développement de sites Web Jul 28, 2023 pm 01:01 PM

PHP et FTP : permettez le partage de fichiers entre plusieurs départements lors du développement de sites Web. Avec le développement d'Internet, de plus en plus d'entreprises commencent à utiliser des plateformes de sites Web pour la diffusion d'informations et la promotion commerciale. Cependant, le problème qui se pose est de savoir comment réaliser le partage de fichiers et la collaboration entre plusieurs départements. Dans ce cas, PHP et FTP deviennent l’une des solutions les plus utilisées. Cet article explique comment utiliser PHP et FTP pour réaliser le partage de fichiers entre plusieurs départements lors du développement de sites Web. 1. Introduction à FTP FTP (FileTransferPr

Comment installer, désinstaller et réinitialiser la sauvegarde du serveur Windows Comment installer, désinstaller et réinitialiser la sauvegarde du serveur Windows Mar 06, 2024 am 10:37 AM

WindowsServerBackup est une fonction fournie avec le système d'exploitation WindowsServer, conçue pour aider les utilisateurs à protéger les données importantes et les configurations système, et à fournir des solutions complètes de sauvegarde et de récupération pour les petites, moyennes et grandes entreprises. Seuls les utilisateurs exécutant Server2022 et versions ultérieures peuvent utiliser cette fonctionnalité. Dans cet article, nous expliquerons comment installer, désinstaller ou réinitialiser WindowsServerBackup. Comment réinitialiser la sauvegarde de Windows Server Si vous rencontrez des problèmes avec la sauvegarde de votre serveur, si la sauvegarde prend trop de temps ou si vous ne parvenez pas à accéder aux fichiers stockés, vous pouvez envisager de réinitialiser vos paramètres de sauvegarde de Windows Server. Pour réinitialiser Windows

Comment comparer des répertoires et des fichiers sur un serveur FTP via PHP Comment comparer des répertoires et des fichiers sur un serveur FTP via PHP Jul 28, 2023 pm 02:09 PM

Comment comparer des répertoires et des fichiers sur un serveur FTP via PHP Dans le développement Web, nous devons parfois comparer des fichiers locaux avec des fichiers sur le serveur FTP pour assurer la cohérence entre les deux. PHP fournit quelques fonctions et classes pour implémenter cette fonctionnalité. Cet article explique comment utiliser PHP pour comparer des répertoires et des fichiers sur un serveur FTP et fournit des exemples de code pertinents. Tout d'abord, nous devons nous connecter au serveur FTP. PHP fournit la fonction ftp_connect() pour établir un serveur FTP

Comment utiliser FTP pour télécharger des fichiers en Python Comment utiliser FTP pour télécharger des fichiers en Python Apr 29, 2023 am 09:49 AM

Introduction à FTP FTP, File Transfer Protocol, est un protocole standard de transfert de fichiers sur le réseau. Le client FTP peut télécharger des fichiers du local vers le serveur ou du serveur vers le local. Le module ftplib Python fournit une bibliothèque standard ftplib pour implémenter les fonctions client FTP en Python. En utilisant ftplib, nous pouvons nous connecter au serveur FTP et effectuer diverses opérations FTP, telles que le téléchargement et le téléchargement de fichiers, etc. Explication du code Voici un exemple de code pour télécharger des fichiers via FTP à l'aide de Python : fromftplibimportFTPimportargparsed

Que signifie Linux FTP 530 ? Que signifie Linux FTP 530 ? Mar 14, 2023 am 10:16 AM

linux ftp530 signifie l'erreur de connexion ftp linux 530. La solution est la suivante : 1. Vérifiez "cat /etc/shells" pour voir si le répertoire personnel et le shell de connexion de votre utilisateur sont là. Sinon, ajoutez-les ; /secure" et réinitialisez le délai d'expiration du mot de passe.

See all articles