php本身不具备直接转换rmvb为mp4的能力,必须借助ffmpeg命令行工具。通过调用系统命令或ffmpeg php库,指定输入文件路径、输出格式为mp4以及视频音频编码器(如h264和aac),即可在服务器端完成转码并获取结果。

如何通过PHP执行FFmpeg命令
使用PHP的exec或shell_exec函数可以直接调用FFmpeg二进制文件。需要构建包含-i参数指定源文件、-c:v libx264指定H.264视频编码、-c:a aac指定AAC音频编码以及-q:v 0控制质量的完整命令字符串。执行该命令后,若返回值为空且文件存在,则说明转码成功;若源文件不存在或权限不足,命令将失败。

system('ffmpeg -i input.rmvb -c:v libx264 -c:a aac -q:v 0 output.mp4', $output, $return_var); if ($return_var === 0 && file_exists('output.mp4')) { echo 'Success'; } else { echo 'Failed: ' . implode("\n", $output); }
如何监控转码进度与处理大文件
对于较大的RMVB文件,同步等待会超时,应改用异步进程管理。通过proc_open启动FFmpeg进程,读取其标准错误输出流中的时间戳信息来解析当前进度。这种方法允许主程序继续响应其他请求,同时实时反馈转码状态给前端用户。
立即学习“PHP免费学习笔记(深入)”;

$descriptors = array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w')); $process = proc_open('ffmpeg -i input.rmvb -c:v libx264 -c:a aac output.mp4', $descriptors, $pipes); while (!feof($pipes[2])) { $line = fgets($pipes[2]); if (preg_match('/time=(\d+:\d+:\d+)/', $line, $matches)) { echo 'Progress: ' . $matches[1]; } } proc_close($process);
转码完成后如何验证生成的MP4文件
转码结束后,需检查输出文件的元数据以确保兼容性。使用ffprobe查询视频的时长、分辨率和编码格式,确认是否已正确转换为H.264/AAC封装。若发现时长异常或编码未变,通常是因为源文件损坏或FFmpeg参数配置错误,此时应重新检查输入路径和编码器名称。



















