日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP使用ffmpeg压缩视频

發(fā)布時間:2023/12/8 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP使用ffmpeg压缩视频 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

PHP使用ffmpeg壓縮視頻

視頻壓縮可以有一下方式:

1.壓縮分辨率

例如視頻的分辨率是720x1280,可以壓縮分辨率為360x640

2.壓縮幀數(shù)

通過壓縮視頻的幀數(shù)來壓縮,可以壓縮視頻的幀數(shù)到1秒10幀甚至1秒5幀

3.壓縮比特率

即壓縮視頻的碼率,要求不高的話可以壓縮到700kb/s左右

4.壓縮音頻碼率

壓縮視頻的音頻碼率,一般可以壓縮到128kb/s或者64kb/s

5.修改視頻編碼方式

現(xiàn)在普遍是H.264編碼,已經(jīng)是最優(yōu)編碼

?

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.壓縮幀數(shù)

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代碼實現(xiàn)獲取視頻信息以及壓縮(壓縮的組合命令是分辨率和比特率):

/* 視頻壓縮 */ 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]; //轉(zhuǎn)換播放時間為秒數(shù)$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;

?

總結(jié)

以上是生活随笔為你收集整理的PHP使用ffmpeg压缩视频的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。