跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

PHP后端获取视频元数据信息_PHP视频元数据信息获取

使用FFmpeg的ffprobe组件可获取视频元数据,通过PHP执行系统命令调用ffprobe并解析JSON输出,提取时长、分辨率、编码格式等信息,需注意文件路径安全与命令注入防护。 在PHP 后端开发 中,获取视频文件的元数据(如时长、分辨率、 编码 格式、帧率、比特率等)是常见的需求,比如用于视频上传校验、信息展示或转码准备。虽然PHP本身不直接支持解析视频元数据,但可以通过调用外部工具 FFmpeg 来实现。 使用FFmpeg获取视频元数据 FFmpeg 是一个强大的多媒体处理工具,能够读取几乎所有常见视频格式的详细信息。PHP 可以通过执行系统命令调用
ffprobe
(FFmpeg 的组件)来获取结构化数据。 确保服务器已安装 FFmpeg,并且 PHP 有权限执行系统命令。 示例:使用
ffprobe
获取 JSON 格式的元数据
$videoPath = '/path/to/your/video.mp4'; $command = "ffprobe -v quiet -print_format json -show_format -show_streams '{$videoPath}'"; $output = shell_exec($command); $metadata = json_decode($output, true); // 输出结果示例 print_r($metadata);
解析关键元数据字段 返回的 JSON 数据包含多个层级,以下是常用信息的提取方式: 立即学习 “ PHP免费学习笔记(深入) ”; PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 视频时长(秒) :
$metadata['format']['duration'] ?? null
总文件大小(字节) :
$metadata['format']['size'] ?? null
比特率(bit/s) :
$metadata['format']['bit_rate'] ?? null
遍历流信息获取视频轨道:
foreach ($metadata['streams'] as $stream) { if ($stream['codec_type'] === 'video') { $width = $stream['width']; $height = $stream['height']; $fps = eval($stream['r_frame_rate']); // 如 "30/1" 转为 30 $codec = $stream['codec_name']; $rotation = $stream['tags']['rotate'] ?? 0; break; } }
封装成工具函数 可将功能封装为复用函数,便于项目调用:
function getVideoMetadata($filePath) { if (!file_exists($filePath)) { return ['error' => '文件不存在']; } $command = "ffprobe -v quiet -print_format json -show_format -show_streams '" . escapeshellcmd($filePath) . "'"; $output = shell_exec($command); $data = json_decode($output, true); if (json_last_error() !== JSON_ERROR_NONE) { return ['error' => '解析失败']; } return $data; }
调用示例:
$meta = getVideoMetadata('./uploads/demo.mp4'); echo "视频时长:" . $meta['format']['duration'] . " 秒\n"; echo "分辨率:{$meta['streams'][0]['width']}x{$meta['streams'][0]['height']}\n";
注意事项与安全建议 使用
escapeshellcmd()
防止命令注入,尤其是路径来自用户输入时 限制允许解析的文件路径范围,避免敏感目录访问 考虑设置执行超时,防止大文件长时间阻塞 生产环境建议配合缓存机制,避免重复调用 ffprobe 基本上就这些。只要 FFmpeg 正确安装,PHP 就能高效获取视频元数据。

相关文章