通過php 調用ffmpeg來擷取視頻資訊

來源:互聯網
上載者:User


ffmpeg是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化為流的開源電腦程式,包含了libavcodec,保證高可移值性和編解碼品質。

本文將介紹使用php調用ffmpeg擷取視頻資訊,調用ffmpeg首先需要伺服器上安裝了ffmpeg,安裝方法很簡單,可自行搜尋。

代碼如下:

<?php// 定義ffmpeg路徑及命令常量define('FFMPEG_CMD', '/usr/local/bin/ffmpeg -i "%s" 2>&1');/** * 使用ffmpeg擷取視頻資訊 * @param  String $file 視頻檔案 * @return Array */function getVideoInfo($file){    ob_start();    passthru(sprintf(FFMPEG_CMD, $file));    $video_info = ob_get_contents();    ob_end_clean();    // 使用輸出緩衝,擷取ffmpeg所有輸出內容    $ret = array();    // Duration: 00:33:42.64, start: 0.000000, bitrate: 152 kb/s    if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $video_info, $matches)){        $ret['duration'] = $matches[1]; // 視頻長度        $duration = explode(':', $matches[1]);        $ret['seconds'] = $duration[0]*3600 + $duration[1]*60 + $duration[2]; // 轉為秒數        $ret['start'] = $matches[2]; // 開始時間        $ret['bitrate'] = $matches[3]; // bitrate 碼率 單位kb    }    // Stream #0:1: Video: rv20 (RV20 / 0x30325652), yuv420p, 352x288, 117 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc    if(preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $video_info, $matches)){        $ret['vcodec'] = $matches[1];     // 編碼格式        $ret['vformat'] = $matches[2];    // 視頻格式        $ret['resolution'] = $matches[3]; // 解析度        list($width, $height) = explode('x', $matches[3]);        $ret['width'] = $width;        $ret['height'] = $height;    }    // Stream #0:0: Audio: cook (cook / 0x6B6F6F63), 22050 Hz, stereo, fltp, 32 kb/s    if(preg_match("/Audio: (.*), (\d*) Hz/", $video_info, $matches)){        $ret['acodec'] = $matches[1];      // 音頻編碼        $ret['asamplerate'] = $matches[2]; // 音頻採樣頻率    }    if(isset($ret['seconds']) && isset($ret['start'])){        $ret['play_time'] = $ret['seconds'] + $ret['start']; // 實際播放時間    }    $ret['size'] = filesize($file); // 視頻檔案大小    $video_info = iconv('gbk','utf8', $video_info);    return array($ret, $video_info);}// 輸出視頻資訊$video_info = getVideoInfo('myvideo.avi');print_r($video_info[0]);?>

輸出:

Array(    [duration] => 00:33:42.64    [seconds] => 2022.64    [start] => 0.000000    [bitrate] => 152    [vcodec] => rv20 (RV20 / 0x30325652)    [vformat] => yuv420p    [resolution] => 352x288    [width] => 352    [height] => 288    [acodec] => cook (cook / 0x6B6F6F63)    [asamplerate] => 22050    [play_time] => 2022.64    [size] => 38630744)

ffmpeg是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化為流的開源電腦程式,包含了libavcodec,保證高可移值性和編解碼品質。

本文將介紹使用php調用ffmpeg擷取視頻資訊,調用ffmpeg首先需要伺服器上安裝了ffmpeg,安裝方法很簡單,可自行搜尋。

代碼如下:

<?php// 定義ffmpeg路徑及命令常量define('FFMPEG_CMD', '/usr/local/bin/ffmpeg -i "%s" 2>&1');/** * 使用ffmpeg擷取視頻資訊 * @param  String $file 視頻檔案 * @return Array */function getVideoInfo($file){    ob_start();    passthru(sprintf(FFMPEG_CMD, $file));    $video_info = ob_get_contents();    ob_end_clean();    // 使用輸出緩衝,擷取ffmpeg所有輸出內容    $ret = array();    // Duration: 00:33:42.64, start: 0.000000, bitrate: 152 kb/s    if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $video_info, $matches)){        $ret['duration'] = $matches[1]; // 視頻長度        $duration = explode(':', $matches[1]);        $ret['seconds'] = $duration[0]*3600 + $duration[1]*60 + $duration[2]; // 轉為秒數        $ret['start'] = $matches[2]; // 開始時間        $ret['bitrate'] = $matches[3]; // bitrate 碼率 單位kb    }    // Stream #0:1: Video: rv20 (RV20 / 0x30325652), yuv420p, 352x288, 117 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc    if(preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $video_info, $matches)){        $ret['vcodec'] = $matches[1];     // 編碼格式        $ret['vformat'] = $matches[2];    // 視頻格式        $ret['resolution'] = $matches[3]; // 解析度        list($width, $height) = explode('x', $matches[3]);        $ret['width'] = $width;        $ret['height'] = $height;    }    // Stream #0:0: Audio: cook (cook / 0x6B6F6F63), 22050 Hz, stereo, fltp, 32 kb/s    if(preg_match("/Audio: (.*), (\d*) Hz/", $video_info, $matches)){        $ret['acodec'] = $matches[1];      // 音頻編碼        $ret['asamplerate'] = $matches[2]; // 音頻採樣頻率    }    if(isset($ret['seconds']) && isset($ret['start'])){        $ret['play_time'] = $ret['seconds'] + $ret['start']; // 實際播放時間    }    $ret['size'] = filesize($file); // 視頻檔案大小    $video_info = iconv('gbk','utf8', $video_info);    return array($ret, $video_info);}// 輸出視頻資訊$video_info = getVideoInfo('myvideo.avi');print_r($video_info[0]);?>

輸出:

Array(    [duration] => 00:33:42.64    [seconds] => 2022.64    [start] => 0.000000    [bitrate] => 152    [vcodec] => rv20 (RV20 / 0x30325652)    [vformat] => yuv420p    [resolution] => 352x288    [width] => 352    [height] => 288    [acodec] => cook (cook / 0x6B6F6F63)    [asamplerate] => 22050    [play_time] => 2022.64    [size] => 38630744)

本文講解了通過php 調用ffmpeg來擷取視頻資訊 ,更多相關內榮請關注php中文網。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.