PHP通过调用FFmpeg可将视频缩放到720p:使用-vf "scale=-2:720"保持宽高比、自动计算偶数宽度,-c:a copy直接复制音频;需确保FFmpeg已安装、PHP有执行权限,并用escapeshellarg()安全处理路径。

PHP 本身不直接处理视频,但可以通过执行系统命令调用 FFmpeg 来完成分辨率调整。将视频缩放到 720p(即高度为 720 像素,宽度按原始宽高比自动计算),关键在于使用 -vf scale=-2:720 参数,确保不拉伸、不裁剪、保持清晰度。
确认 FFmpeg 已安装并可执行
在 PHP 中调用前,需确保服务器已安装 FFmpeg,且 PHP 有权限运行外部命令(如 exec、shell_exec):
- Linux/macOS:终端运行
ffmpeg -version验证 - Windows:确保 ffmpeg.exe 在系统 PATH 或指定完整路径
- PHP 中检查:
exec('which ffmpeg', $out); echo !empty($out) ? 'OK' : 'Not found';
核心命令:保持比例缩放到 720p 高度
推荐使用 scale=-2:720(-2 表示宽度自动按比例计算,且保证为偶数,适配大多数编码器):
- 基础命令:
ffmpeg -i input.mp4 -vf "scale=-2:720" -c:a copy output_720p.mp4 -
-c:a copy表示音频流直接复制,不重编码,加快处理速度 - 若需强制宽度为 1280(如 1280×720),可用
scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2(先缩放再居中补黑边)
PHP 中安全执行示例
避免用户输入直传命令,建议对文件路径做白名单或转义:
立即学习“PHP免费学习笔记(深入)”;
- 使用
escapeshellarg()处理路径:$input = escapeshellarg('/path/to/input.mp4'); - 组合命令:
$cmd = "ffmpeg -i $input -vf \"scale=-2:720\" -c:a copy " . escapeshellarg($output); - 执行并捕获结果:
$outputLines = []; $returnCode = 0; exec($cmd . ' 2>&1', $outputLines, $returnCode); - 检查
$returnCode === 0判断是否成功;非零值表示出错,$outputLines含错误信息
注意事项与常见问题
实际使用中容易忽略这些细节:
- PHP 运行用户(如 www-data、apache)必须对输入/输出目录有读写权限
- 大视频可能超时,需设置:
set_time_limit(0);并考虑异步处理(如队列) - 部分服务器禁用
exec,可改用proc_open更精细控制 stdin/stdout/stderr - 若原视频高度 ≤ 720,加
-vf "scale=-2:720:force_original_aspect_ratio=increase"可避免放大模糊(慎用,通常不建议上采样)



















