当前位置: 首页 > PHP > ffmpeg 获取音频时长、转换格式、以及截取音频

ffmpeg 获取音频时长、转换格式、以及截取音频

  • 分类:PHP
  • 本文标签: php ffmpeg
  • 发布时间:2017-06-16 17:08:32
  • 作者:Ferman
  • 查看数: 122

一个简单的class,先暂时用到了这几个方法,ffmpeg号称是音视频界的军工刀!

<?php

/**
 * ffmpeg 处理音频文件.
 * @author cuihongbo
 * @date 20170520
 */
class FfmpegHelper
{

  private static $ffmpeg = "ffmpeg";
  private static $ffprobe = "ffprobe";

  /**
   * 获取文件总时长
   * return 秒.毫秒
   */
  public static function duration($srcPath) {
    if (!file_exists($srcPath)) {
      return 0;
    }

    try {
      $cmd = self::$ffprobe." -show_entries format=duration
       -v quiet -of csv='p=0' -i $srcPath";
      exec($cmd, $rev);
    } catch (Exception $e) {
      return false;
    }

    $duration = floatval($rev[0]);

    if( 10 > $duration )
    {
      return 0;
    }

    return $duration;
  }

  /**
   * 截取
   */
  public static function cut($paramArr) {
    $options = array(
      'srcPath'   => '', #源文件路径
      'desPath'   => '', #目标文件路径
      'startTime' => 0, # 00:00:00.00  分:秒.毫秒
      'duration'   => 0, # 00:00:00.00  分:秒.毫秒
    );
    if (is_array($paramArr))$options = array_merge($options, $paramArr);
    extract($options);

    if (!$srcPath || !$desPath) {
      return false;
    }

    if ($duration < 10) {
      return false;
    }

    $cmd = self::$ffmpeg.' -y -i '.$srcPath.' -ss '.$startTime
    .' -t '.$duration.' -acodec copy '.$desPath.' > /dev/null 2>&1';
    try {
      $res = exec($cmd, $output);
    } catch (Exception $e) {
      return false;
    }
    return true;
  }


  /**
   * 伴奏文件转为 m4a
   */
  public static function turnM4a ($paramArr) {
    $options = array(
      'srcPath' => '', #源文件路径
      'desPath' => '', #目标文件路径
      'bitrate' => '96k',
    );
    if (is_array($paramArr))$options = array_merge($options, $paramArr);
    extract($options);

    if(!$srcPath || !$desPath ) return false;

    if(!is_file($srcPath) || filesize($srcPath) < 100) {
      return false;
    }

    try {
      $cmd = self::$ffmpeg.' -loglevel 0 -i "'. $srcPath. '"
       -map_channel 0.0.0 -b:a '.$bitrate.' "'. $desPath. '"';
      exec($cmd, $output);
    } catch (Exception $e) {
      return false;
    }

    return true;
  }
}


转载时请以 超链接的形式 注明:转自Ferman

                  

About me