PHP使用ffmpeg压缩视频

视频压缩可以有一下方式:

1.压缩分辨率

例如视频的分辨率是720x1280,可以压缩分辨率为360x640

2.压缩帧数

通过压缩视频的帧数来压缩,可以压缩视频的帧数到1秒10帧甚至1秒5帧

3.压缩比特率

即压缩视频的码率,要求不高的话可以压缩到700kb/s左右

4.压缩音频码率

压缩视频的音频码率,一般可以压缩到128kb/s或者64kb/s

5.修改视频编码方式

现在普遍是H.264编码,已经是最优编码

ffmpeg命令

1.查看视频信息

ffmpeg -i video.mp4

bitrate:1724kb/s就是比特率,128kb/s就是音频的码率,720x1280就是分辨率

2.压缩

我这边压缩视频的做法是只压缩比特率和分辨率,这样对视频的影响最小

ffmpeg -i video.mp4 -s 360x640 -b:v 862k new.mp4

其中-s 360x640表示修改分辨率为360x640

其中-b:v 862k表示修改比特率为862kb/s

其中video.mp4为原视频

其中new.mp4为压缩后的视频地址

其他压缩命令:

1.压缩帧数

ffmpeg -i video.mp4 -r 5 new.mp4

其中-r 5表示1秒5帧

2.压缩音频码率

ffmpeg -i video.mp4 -b:a 64k new.mp4

其中-b:a 64k表示音频码率为64k/s

3.修改编码方式

ffmpeg -i video.mp4 -vcodec libx264 new.mp4

其中-vcodec libx264表示H.264编码

上面的命令都是可以组合使用的,找到符合需求的命令组合压缩视频即可。

PHP代码实现获取视频信息以及压缩(压缩的组合命令是分辨率和比特率):

/* 视频压缩 */
public function compressVideo($file, $file_name) {$file_content = file_get_contents($file);$compress_path = PUBLIC_PATH;$compress_file = $compress_path . $file_name . '.mp4';$compress_after_file = $compress_path . $file_name . '_compress.mp4';try{file_put_contents($compress_file, $file_content);$video_info;exec(FFMPEG_PATH . "ffmpeg -i {$compress_file} 2>&1", $video_info);$video_info = implode(' ', $video_info);$bitrate = '';    // 比特率$resolution = ''; // 分辨率if(preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $video_info, $match)) {$bitrate = $match[3];}if(preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $video_info, $match)) {$resolution = $match[3];}$file_size = filesize($compress_file);$file_size = intval($file_size / 1048576);if(empty($bitrate)) throwErr('找不到比特率信息');if(empty($resolution)) throwErr('找不到分辨率信息');if($file_size < 10) throwErr('视频大小不足10M,不需要压缩', null, 1100);$resolution = explode('x', $resolution);$bitrate_update = '';$resolution_width_update = '';$resolution_height_update = '';$bitrate_update = $this->getVideoCompressBitrate($bitrate);$resolution_percent = 0;if($resolution[0] > $resolution[1]) {if($resolution[1] > 320) {$resolution_percent = $resolution[1] <= 520 ? 0.8 : 0.5;}}else {if($resolution[0] > 320) {$resolution_percent = $resolution[0] <= 520 ? 0.8 : 0.5;}}if($resolution_percent > 0) {$resolution_width_update = intval($resolution[0] * $resolution_percent);$resolution_height_update = intval($resolution[1] * $resolution_percent);}if(empty($bitrate_update) && empty($resolution_width_update)) throwErr('比特率和分辨率同时不满足压缩条件', null, 1100);$compress_bitrate = '';$compress_resolution = '';if(!empty($bitrate_update)) {$compress_bitrate = "-b:v {$bitrate_update}k";}if(!empty($resolution_width_update)) {$compress_resolution = "-s {$resolution_width_update}x{$resolution_height_update}";}$compress_exec = FFMPEG_PATH . "ffmpeg -i {$compress_file} %s% %v% {$compress_after_file}";$compress_exec = str_replace(array('%s%', '%v%'), array($compress_resolution, $compress_bitrate), $compress_exec);exec($compress_exec);unlink($compress_file);return array('compress_file' => $compress_after_file);}catch(\Exception $e) {unlink($compress_file);return array();}
}/* 获取视频压缩比特率 */
public function getVideoCompressBitrate($bitrate, $query_count = 0) {$bitrate_update = '';if($bitrate >= 700) {if($bitrate <= 1000) {$bitrate_update = intval($bitrate * 0.8);}else {$bitrate_update = intval($bitrate * 0.5);}}if(empty($bitrate_update)) {return $query_count == 0 ? $bitrate_update : $bitrate;}else {return $this->getVideoCompressBitrate($bitrate_update, ++$query_count);}
}

这里提供PHP获取视频的所有信息代码:

$info = '';
exec(FFMPEG_PATH . "ffmpeg -i {$compress_file} 2>&1", $info);$data = array();
if (preg_match("/Duration: (.*?), start: (.*?), bitrate: (\d*) kb\/s/", $info, $match)) {$data['duration'] = $match[1]; //播放时间$arr_duration = explode(':', $match[1]);$data['seconds'] = $arr_duration[0] * 3600 + $arr_duration[1] * 60 + $arr_duration[2]; //转换播放时间为秒数$data['start'] = $match[2]; //开始时间$data['bitrate'] = $match[3]; //码率(kb)
}
if (preg_match("/Video: (.*?), (.*?), (.*?)[,\s]/", $info, $match)) {$data['vcodec'] = $match[1]; //视频编码格式$data['vformat'] = $match[2]; //视频格式$data['resolution'] = $match[3]; //视频分辨率$arr_resolution = explode('x', $match[3]);$data['width'] = $arr_resolution[0];$data['height'] = $arr_resolution[1];
}
if (preg_match("/Audio: (\w*), (\d*) Hz/", $info, $match)) {$data['acodec'] = $match[1]; //音频编码$data['asamplerate'] = $match[2]; //音频采样频率
}
if (isset($data['seconds']) && isset($data['start'])) {$data['play_time'] = $data['seconds'] + $data['start']; //实际播放时间
}
return $data;

PHP使用ffmpeg压缩视频相关推荐

  1. ffmpeg 压缩视频

    ffmpeg 压缩视频 代码 ffmpeg -i input.mp4 -r 30 -b:a 64k output.mp4 30: 帧数 64k: 表示音频的码率为64kb/s

  2. js版ffmpeg压缩视频以及去除背景音乐

    ffmepg地址:https://unpkg.com/@ffmpeg/ffmpeg@0.9.5/dist/ffmpeg.min.js 这个是网上编译好的,功能还挺多的,我自己不会编译,只能用别人的 用 ...

  3. 【视频编码】ffmpeg压缩视频文件

    一.引言 首先,了解下播放视频的基本流程,如下图所示: 解封装:就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据.如上图,将MP4和FLV格式解封装成视频数据H264.MPE ...

  4. ffmpeg压缩视频

    经常采用python+opencv处理视频会发现,当用VideoWriter写单帧的时候,实际上不会进行帧间压缩的.所以,往往处理一个视频的所有帧以后发现,输出视频变得非常大.因为就是一堆图片的集合. ...

  5. 七十行代码教你使用 python ffmpeg 压缩视频,再也不用担心视频过大了

    前期准备 最近要压缩视频,然后发现一些压缩视频的工具要是收费,要么有水印,完全不符合要求啊.正当我发愁的时候突然想到,去年的时候接触过 ffmpeg ,可以用python ffmpeg 来压缩视频啊, ...

  6. [技术杂谈][转载]ffmpeg压缩视频几个参数解析

    Ffmpeg 视频压缩的几个关键参数 Ffmpeg的视频操作官网文档:FFmpeg Filters Documentation 视频压缩用到的参数主要为以下几个: 文件路径:-i 输入文件的路径 码率 ...

  7. 浅谈ffmpeg 压缩视频

    1 首选需要安装ffmpeg 安装ffmpeg Linux 宝塔面板安装FFMpeg和编码库 yum install https://download1.rpmfusion.org/free/el/r ...

  8. python压缩视频文件_python使用zlib库压缩图片,使用ffmpeg压缩视频

    # ffmpeg -i 1.mp4 -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline -crf 2 ...

  9. Java使用ffmpeg压缩视频

    1.引入maven仓库 <dependency><groupId>ws.schild</groupId><artifactId>jave-core< ...

最新文章

  1. Nature子刊:来自人类肠道菌群的189,680种DNA病毒基因组集
  2. html5 meta标签属性整理
  3. 欧几里得距离网络_Scientific Reports|基于集成相似度的神经网络药物相互作用预测...
  4. netty socket超时设置_Netty 学习和进阶策略
  5. Android笔记(六十七) 自定义控件
  6. root - 计算机术语,root什么意思
  7. Kafka 源码分析之网络层(一)
  8. 潭州课堂25班:Ph201805201 并发(非阻塞,epoll) 第十课 (课堂笔记)
  9. Linux 如何隔离CPU核心 isolcpus=0-2
  10. 2019死磕java面试题_死磕 java同步系列之开篇
  11. 36、NSTimer使用详解-开启、关闭、移除
  12. 首款“印度制造”的微处理器 AJIT 面世!
  13. NG-ZORRO 7.3.0 发布,Ant Design 的 Angular 实现
  14. php封装函数输出,php函数封装
  15. 自己动手开发编译器(二)正则语言和正则表达式
  16. 转载的关于pthread_cond_wait的文章,写的比较详细
  17. 分苹果(C语言实现)
  18. matlab主成分分析散点图_主成分分析与matlab
  19. JAVA 利用牛顿迭代公式开方
  20. 计算机领域伟大成就,十五863计划信息技术领域重大科技工作成就

热门文章

  1. HTML基础学习记录
  2. 基于CCD摄像头智能车分段PID控制算法设计
  3. 新玺配资:上证指数震荡向上 关注3550区域压力!
  4. Let's go home 【2-sat 经典作图】+【scc判定有无解】
  5. C4D学习笔记2-动画-时间线及时间函数
  6. 【人工智能实验】运用贝叶斯决策理论实现手写数字识别
  7. 2021上半年程序员新书大盘点
  8. H5引入Web调试工具、VConsole引入
  9. 基于智能空间布局优化的系留低空应急通信系统设计及研究
  10. openlayers自定义控件 ---仿百度地图指南针