ホームページ バックエンド開発 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://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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

nginx リバースプロキシ FTP サーバーをセットアップする方法 nginx リバースプロキシ FTP サーバーをセットアップする方法 May 17, 2023 am 09:31 AM

1. nginx をインストールする 2. vsftpd をインストールする 3. nginx 構成ファイル nginx.conf を変更する 3.1 最初の行に ftp ユーザー userftpuser を追加する; 3.2 関連するパスサーバーを構成する { listen80; #nginx プロキシポート server_namelocalhost; #ftp サーバーアドレスの場所/ image{ root /home/ftpuser; #プロキシ FTP サーバーのフォルダーの絶対パス Indexftpuser; #ようこそページを設定します

Go での FTP の使用: 完全ガイド Go での FTP の使用: 完全ガイド Jun 17, 2023 pm 06:31 PM

インターネットの急速な発展に伴い、ファイル転送プロトコル (FTP) は常に重要なファイル転送方法となっています。 Go 言語では、FTP を使用してファイルを転送することが多くの開発者のニーズとなる可能性があります。しかし、Go言語でのFTPの使い方がわからない人も多いのではないでしょうか。この記事では、FTPサーバーへの接続からファイル転送まで、Go言語で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:Webサイト開発における複数部門間でのファイル共有を実現 PHPとFTP:Webサイト開発における複数部門間でのファイル共有を実現 Jul 28, 2023 pm 01:01 PM

PHPとFTP:Webサイト開発における複数部門間でのファイル共有を実現 インターネットの発展に伴い、情報発信や事業推進にWebサイトプラットフォームを利用する企業が増えています。ただし、複数の部門間でのファイル共有とコラボレーションをどのように実現するかが問題になります。この場合、PHP と FTP は最も一般的に使用されるソリューションの 1 つになります。この記事では、Webサイト開発においてPHPとFTPを使って複数部門間でのファイル共有を実現する方法を紹介します。 1. FTP の概要 FTP (FileTransferPr)

Windows サーバーのバックアップをインストール、アンインストール、リセットする方法 Windows サーバーのバックアップをインストール、アンインストール、リセットする方法 Mar 06, 2024 am 10:37 AM

WindowsServerBackup は、WindowsServer オペレーティング システムに付属する機能で、ユーザーが重要なデータとシステム構成を保護し、中小企業、エンタープライズ レベルの企業に完全なバックアップおよび回復ソリューションを提供できるように設計されています。この機能を使用できるのは、Server2022 以降を実行しているユーザーのみです。この記事では、WindowsServerBackup のインストール、アンインストール、またはリセットの方法を説明します。 Windows Server バックアップをリセットする方法 サーバー バックアップで問題が発生したり、バックアップに時間がかかりすぎたり、保存されているファイルにアクセスできない場合は、Windows Server バックアップ設定をリセットすることを検討してください。 Windowsをリセットするには

FTP を使用して Python でファイルをアップロードする方法 FTP を使用して Python でファイルをアップロードする方法 Apr 29, 2023 am 09:49 AM

FTP の概要 FTP は、ネットワーク上でファイルを転送するための標準プロトコルであるファイル転送プロトコル (FileTransferProtocol) です。 FTP クライアントは、ローカルからサーバーにファイルをアップロードしたり、サーバーからローカルにファイルをダウンロードしたりできます。 ftplib モジュール Python は、Python で FTP クライアント機能を実装するための標準ライブラリ ftplib を提供します。 ftplib を使用すると、FTP サーバーに接続し、ファイルのアップロードやダウンロードなどのさまざまな FTP 操作を実行できます。コードの説明 以下は、Python を使用して FTP 経由でファイルをアップロードするためのサンプル コードです。

PHP 経由で FTP サーバー上のディレクトリとファイルを比較する方法 PHP 経由で FTP サーバー上のディレクトリとファイルを比較する方法 Jul 28, 2023 pm 02:09 PM

PHP を使用して FTP サーバー上のディレクトリとファイルを比較する方法 Web 開発では、ローカル ファイルと FTP サーバー上のファイルを比較して、2 つのファイル間の一貫性を確保する必要がある場合があります。 PHP は、この機能を実装するためのいくつかの関数とクラスを提供します。この記事では、PHP を使用して FTP サーバー上のディレクトリとファイルを比較する方法を紹介し、関連するコード例を示します。まず、FTP サーバーに接続する必要があります。 PHP は、FTP サーバーを確立するための ftp_connect() 関数を提供します。

Linux FTP 530 とはどういう意味ですか? Linux FTP 530 とはどういう意味ですか? Mar 14, 2023 am 10:16 AM

linux ftp530 は、linux ftp ログイン エラー 530 を意味します。解決策は次のとおりです: 1. "cat /etc/shells" をチェックして、ユーザーのホーム ディレクトリとログイン シェルが存在するかどうかを確認します。存在しない場合は追加します。 2. "/var /log" をチェックします。 /secure」ファイルを編集し、パスワードの有効期限をリセットします。

See all articles