Home  >  Article  >  Backend Development  >  Call ffmpeg through php to get video information

Call ffmpeg through php to get video information

jacklove
jackloveOriginal
2018-06-20 17:04:052582browse


ffmpeg is a set of open source computer programs that can be used to record, convert digital audio and video, and convert them into streams, including libavcodec ensures high portability and encoding and decoding quality.

This article will introduce how to use php to call ffmpeg to obtain video information. To call ffmpeg, you first need to install ffmpeg on the server. The installation method is very simple and you can search by yourself.

The code is as follows:

<?php// 定义ffmpeg路径及命令常量define(&#39;FFMPEG_CMD&#39;, &#39;/usr/local/bin/ffmpeg -i "%s" 2>&1&#39;);/**
 * 使用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[&#39;duration&#39;] = $matches[1]; // 视频长度
        $duration = explode(&#39;:&#39;, $matches[1]);        $ret[&#39;seconds&#39;] = $duration[0]*3600 + $duration[1]*60 + $duration[2]; // 转为秒数
        $ret[&#39;start&#39;] = $matches[2]; // 开始时间
        $ret[&#39;bitrate&#39;] = $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[&#39;vcodec&#39;] = $matches[1];     // 编码格式
        $ret[&#39;vformat&#39;] = $matches[2];    // 视频格式
        $ret[&#39;resolution&#39;] = $matches[3]; // 分辨率
        list($width, $height) = explode(&#39;x&#39;, $matches[3]);        $ret[&#39;width&#39;] = $width;        $ret[&#39;height&#39;] = $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[&#39;acodec&#39;] = $matches[1];      // 音频编码
        $ret[&#39;asamplerate&#39;] = $matches[2]; // 音频采样频率
    }    if(isset($ret[&#39;seconds&#39;]) && isset($ret[&#39;start&#39;])){        $ret[&#39;play_time&#39;] = $ret[&#39;seconds&#39;] + $ret[&#39;start&#39;]; // 实际播放时间
    }    $ret[&#39;size&#39;] = filesize($file); // 视频文件大小
    $video_info = iconv(&#39;gbk&#39;,&#39;utf8&#39;, $video_info);    return array($ret, $video_info);

}// 输出视频信息$video_info = getVideoInfo(&#39;myvideo.avi&#39;);
print_r($video_info[0]);?>

Output:

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 is a set that can be used An open source computer program that records, converts digital audio and video, and converts it into streams, including libavcodec, ensuring high portability and codec quality.

This article will introduce how to use php to call ffmpeg to obtain video information. To call ffmpeg, you first need to install ffmpeg on the server. The installation method is very simple and you can search by yourself.

The code is as follows:

<?php// 定义ffmpeg路径及命令常量define(&#39;FFMPEG_CMD&#39;, &#39;/usr/local/bin/ffmpeg -i "%s" 2>&1&#39;);/**
 * 使用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[&#39;duration&#39;] = $matches[1]; // 视频长度
        $duration = explode(&#39;:&#39;, $matches[1]);        $ret[&#39;seconds&#39;] = $duration[0]*3600 + $duration[1]*60 + $duration[2]; // 转为秒数
        $ret[&#39;start&#39;] = $matches[2]; // 开始时间
        $ret[&#39;bitrate&#39;] = $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[&#39;vcodec&#39;] = $matches[1];     // 编码格式
        $ret[&#39;vformat&#39;] = $matches[2];    // 视频格式
        $ret[&#39;resolution&#39;] = $matches[3]; // 分辨率
        list($width, $height) = explode(&#39;x&#39;, $matches[3]);        $ret[&#39;width&#39;] = $width;        $ret[&#39;height&#39;] = $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[&#39;acodec&#39;] = $matches[1];      // 音频编码
        $ret[&#39;asamplerate&#39;] = $matches[2]; // 音频采样频率
    }    if(isset($ret[&#39;seconds&#39;]) && isset($ret[&#39;start&#39;])){        $ret[&#39;play_time&#39;] = $ret[&#39;seconds&#39;] + $ret[&#39;start&#39;]; // 实际播放时间
    }    $ret[&#39;size&#39;] = filesize($file); // 视频文件大小
    $video_info = iconv(&#39;gbk&#39;,&#39;utf8&#39;, $video_info);    return array($ret, $video_info);

}// 输出视频信息$video_info = getVideoInfo(&#39;myvideo.avi&#39;);
print_r($video_info[0]);?>

Output:

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)

This article explains how to call ffmpeg through php to obtain video information. Please pay attention to more related content. php Chinese website.

related suggestion:

The above is the detailed content of Call ffmpeg through php to get video information. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn