php实现视频压缩
使用FFmpeg进行视频压缩
PHP可以通过调用FFmpeg命令行工具实现视频压缩。FFmpeg是一个强大的多媒体处理工具,支持多种视频格式的转码和压缩。
安装FFmpeg后,使用PHP的exec函数调用命令行:
$inputFile = 'input.mp4';
$outputFile = 'output.mp4';
$command = "ffmpeg -i $inputFile -vcodec libx264 -crf 28 -preset fast -acodec aac $outputFile";
exec($command);
调整压缩参数优化输出
CRF值控制视频质量,范围0-51,数值越小质量越高。通常24-28是较好的平衡点:
$crf = 24; // 质量参数
$preset = 'medium'; // 编码速度预设
$command = "ffmpeg -i $inputFile -vcodec libx264 -crf $crf -preset $preset $outputFile";
处理音频流
保持音频质量的同时减小文件大小:
$audioBitrate = '128k'; // 音频比特率
$command = "ffmpeg -i $inputFile -vcodec libx264 -crf 28 -acodec aac -b:a $audioBitrate $outputFile";
批量处理视频文件
遍历目录压缩多个视频文件:
$videos = glob('videos/*.mp4');
foreach($videos as $video) {
$output = 'compressed/'.basename($video);
$command = "ffmpeg -i $video -vcodec libx264 -crf 28 $output";
exec($command);
}
使用PHP-FFmpeg扩展包
安装PHP-FFmpeg扩展提供更友好的API:
require 'vendor/autoload.php';
$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open('input.mp4');
$video->save(new FFMpeg\Format\Video\X264(), 'output.mp4');
控制输出分辨率
降低分辨率减少文件大小:
$command = "ffmpeg -i $inputFile -vf 'scale=640:480' -vcodec libx264 -crf 28 $outputFile";
监控处理进度
获取转码进度信息:
$command = "ffmpeg -i $inputFile -vcodec libx264 -crf 28 $outputFile 2>&1";
exec($command, $output);
$progress = implode("\n", $output);
处理不同视频格式
针对不同输入格式调整参数:
$format = pathinfo($inputFile, PATHINFO_EXTENSION);
if($format == 'mov') {
$command = "ffmpeg -i $inputFile -vcodec libx264 -crf 28 -pix_fmt yuv420p $outputFile";
}
注意事项
确保服务器已安装FFmpeg并配置正确权限。大型视频文件处理可能消耗较多资源,建议在后台任务中执行。输出文件格式应与输入文件兼容,某些编解码器可能需要额外参数。







