亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP利用FFmpeg實(shí)現(xiàn)獲取遠(yuǎn)程視頻的時(shí)長(zhǎng)和截圖

 更新時(shí)間:2024年04月24日 09:16:20   作者:潘廣宇  
這篇文章主要為大家詳細(xì)介紹了PHP如何利用FFmpeg實(shí)現(xiàn)獲取遠(yuǎn)程視頻的時(shí)長(zhǎng)和截圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

突然發(fā)現(xiàn) FFmpeg 這個(gè)軟件還可以直接拉取遠(yuǎn)程視頻的相關(guān)信息,也就是可以不通過下載視頻到本地的方式,直接遠(yuǎn)程去獲取視頻時(shí)長(zhǎng)和截圖。

假設(shè)我們的視頻url是:http://my.com/a.mp4

第一步,Linux 安裝 FFmpeg 軟件

第二步,通過composer安裝FFmpeg的庫(kù)

composer require php-ffmpeg/php-ffmpeg

1、獲取遠(yuǎn)程視頻時(shí)長(zhǎng)

use FFMpeg\FFMpeg;
 
require 'vendor/autoload.php';
 
$ffmpeg = FFMpeg::create();
$video = $ffmpeg->open('https://xxx.mp4');
 
// 獲取視頻的時(shí)長(zhǎng)(秒)
$duration = $video->getStreams()->first()->get('duration');

2、獲取遠(yuǎn)程視頻的第一幀

use FFMpeg\Coordinate\TimeCode;
use FFMpeg\FFMpeg;
 
require 'vendor/autoload.php';
 
$ffmpeg = FFMpeg::create();
$video = $ffmpeg->open('https://xxx.mp4');
 
// 獲取視頻的時(shí)長(zhǎng)(秒)
$duration = $video->getStreams()->first()->get('duration');
 
echo $duration;
$outputImage = '/data/b.jpg';  // 替換為您希望保存第一幀的物理路徑
 
// 提取第一幀(默認(rèn)情況下,F(xiàn)FMpeg庫(kù)將從視頻的開始處獲取第一幀)
$frame = $video->frame(TimeCode::fromSeconds(0));
         
// 將第一幀保存到指定的圖像文件
$frame->save($outputImage, 'image/jpeg');

經(jīng)測(cè)試,以上過程的調(diào)用,并不需要完全把視頻下載到本地再解析,可以實(shí)現(xiàn)遠(yuǎn)程獲取直接秒級(jí)返回!

3.知識(shí)補(bǔ)充

除了上文的方法,小編還為大家整理了一些其他PHP關(guān)于視頻文件的相關(guān)操作,希望對(duì)大家有所幫助

php 利用服務(wù)器liunx 獲取 視頻、音頻 時(shí)長(zhǎng),封面圖

/**
 * 利用服務(wù)器ffmpeg命令截取視頻幀數(shù)
 * @param string $local_file_url 服務(wù)器文件路徑,以./開頭
 * @param string $screenshot_local_file_url 保存的視頻截幀圖片路徑,以./開頭
 * @param string $time 截取視頻秒數(shù)
 * @date 2021-06-24
 */
function get_video_screenshot_by_ffmpeg($local_file_url, $screenshot_local_file_url, $time = 0)
{
    $str = 'ffmpeg -i ' . $local_file_url . ' -y -f image2 -ss ' . $time . ' -t 0.001 ' . $screenshot_local_file_url;
    exec($str);
 
    return $screenshot_local_file_url;
}
//獲得視頻文件的總長(zhǎng)度時(shí)間和創(chuàng)建時(shí)間
function get_video_time($local_file_url){
    $vtime = exec("ffmpeg -i ".$local_file_url." 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//");//總長(zhǎng)度
    $duration = explode(":",$vtime);
    $duration_in_secOnds= $duration[0]*3600 + $duration[1]*60+ round($duration[2]);//轉(zhuǎn)化為秒
    return $duration_in_secOnds;
}

PHP使用ffmpeg獲取視頻的時(shí)長(zhǎng)和截取視頻圖片

// 獲取上傳的視頻斜體樣式
$files= $_FILES[‘file'];

function upload_video($files){

	// 判斷上傳是否正常
    if ($files['error'] == 0){
    
        $ext = strtolower(pathinfo(@$files['name'],PATHINFO_EXTENSION));// 截取上傳的視頻后綴
        $allowExts = array("vob","ifo","mpg","mpeg","dat","mp4","3gp","mov","rm","ram","rmvb","wmv","asf","avi","asx");// 設(shè)置允許上傳的視頻后綴
        $path = '../asj/video/'; // 設(shè)置附件上傳保持目錄
        if (!in_array($ext, $allowExts)){
        	// 判斷上傳視頻后綴是否符合
            $result = ['data' => '', 'code' => -1, 'message' => '非法文件類型!'];
        }else{
            $fileName = date('Ymd').time();// 設(shè)置視頻新的名稱
			$destName = $path.$fileName.".".$ext;// 保存視頻到指定路徑
			// 判斷視頻上傳是否成功
            if (!move_uploaded_file($files['tmp_name'], $destName)){
                $result = ['data' => '', 'code' => -1, 'message' => '文件上傳失??!'];
            }else{
            	$outdata = array();
            	$outdata['path'] = "video/$fileName.$ext";
                $ffmpeg = 'C:\\Windows\\System32\\ffmpeg\\bin\\ffmpeg.exe';// ffmpeg安裝的路徑
				// 獲取視頻的相關(guān)信息
                $data = get_video_info($ffmpeg, $destName, $fileName);
				$outdata['time'] = $data['time'];
            	$outdata['img'] = $data['img'];
            	$result = ['data' => $outdata, 'code' => 200, 'message' => '文件上傳成功!'];
            }
		}
    }else{
        switch (@$files['error']) {
            case 1:
                $msg = "上傳的文件超過了 php.ini 中 upload_max_filesize 選項(xiàng)限制的值!";
                break;
            case 2:
                $msg = "上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項(xiàng)指定的值!";
                break;
            case 3:
                $msg = "文件只有部分被上傳!";
                break;
            case 4:
                $msg = "沒有文件被上傳!";
                break;
            case 6:
            case 7:
                $msg = "系統(tǒng)錯(cuò)誤!";
                break;
        }
        $result = ['data' => '', 'code' => -1, 'message' => $msg];
    }

如果exec()未正確返回參照

/**

獲取視頻的相關(guān)信息
@param $ffmpeg_path// ffmpeg.exe路徑
@param $video_path// 視頻的路徑
@param $fileName// 保存的圖片名稱和視頻的新名稱一致
@return array
*/
function get_video_info($ffmpeg_path, $video_path, $fileName){

if (!file_exists($video_path)) {
 	return false;
}

// 獲取視頻時(shí)長(zhǎng)信息    
$commond = " $ffmpeg_path -i $video_path 2>&1";

exec($commond, $str_res, $str_r);

if (is_array($str_res)){

    foreach($str_res as $v){
    
        if (strpos( $v, 'Duration') !== false){
        
            $times = substr($v, stripos($v , '.') - 8, 8);// 截取時(shí)分秒
            $arr_duration = explode(':', $times);// 轉(zhuǎn)出相應(yīng)的數(shù)組
            $seconds = $arr_duration[0] * 3600 + $arr_duration[1] * 60 + $arr_duration[2];//轉(zhuǎn)換播放時(shí)間為秒數(shù)
            break;
        }
    }
}

// 截取視頻圖片
$time = 1;// 根據(jù)時(shí)間截取視頻的圖片
$img_url = "..\\asj\\video\\imgs\\$fileName.jpg";
$img_name = "video/imgs/ $fileName.jpg";
exec(" $ffmpeg_path -i $video_path -f image2 -ss $time -s 320x240 -vframes 1 $img_url", $out, $status);

$outdata = array();
$outdata['time'] = $seconds;// 秒數(shù)
$outdata['img'] = $img_name;
return $outdata;

到此這篇關(guān)于PHP利用FFmpeg實(shí)現(xiàn)獲取遠(yuǎn)程視頻的時(shí)長(zhǎng)和截圖的文章就介紹到這了,更多相關(guān)PHP FFmpeg獲取視頻時(shí)長(zhǎng)和截圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論