Skip to content

用PHP的简单系统,完成FFmpeg对视频的切片转码处理!

License

Notifications You must be signed in to change notification settings

OsGits/FFmpegPHP

Repository files navigation

FFmpegPHP

项目介绍

FFmpegPHP 是一个基于 PHP 和 FFmpeg 的视频转码切片工具,专门用于将各种格式的视频文件转换为 HLS (HTTP Live Streaming) 流格式,支持视频切片、截图生成和 GPU 加速等功能。

主要功能

  • 视频转码:将 MP4、AVI、MOV、WMV、FLV、MKV 等格式的视频转换为 HLS 流格式
  • 视频切片:自动将视频切割成指定时长的 TS 片段文件
  • M3U8 生成:自动生成 HLS 播放列表文件
  • 视频截图:在指定时间点生成视频缩略图
  • GPU 加速:支持 CUDA、DXVA2、D3D11VA、AMF 等多种 GPU 加速方式
  • 多画质支持:支持原始画质、1080p、720p 等多种画质设置
  • 转码记录:实时显示转码进度和历史记录
  • 响应式界面:适配不同设备的访问

系统要求

环境要求

  • PHP 7.0 或更高版本
  • Windows 操作系统
  • Web 服务器(如 Apache、Nginx、IIS 等)

软件依赖

  • FFmpeg:必须安装并配置到系统 PATH 中,或在设置中指定完整路径
  • GPU 驱动:如需使用 GPU 加速,需安装对应显卡的最新驱动

安装配置

1. 下载安装

  1. 将项目文件解压到 Web 服务器的根目录
  2. 确保以下目录存在且具有写入权限:
    • vodoss/:待转码视频目录
    • m3u8/:转码后输出目录
    • logs/:日志文件目录

2. 配置 FFmpeg

方法 1:将 FFmpeg 添加到系统 PATH 环境变量中

方法 2:在设置页面中指定 FFmpeg 的完整路径,例如:

  • Windows: C:/ffmpeg/bin/ffmpeg.exe

3. 配置文件

系统会自动创建默认配置文件 config.json,包含以下配置项:

{
    "ffmpeg_path": "ffmpeg",
    "input_dir": "./vodoss/",
    "output_dir": "./m3u8/",
    "base_url": "",
    "segment_duration": 10,
    "screenshot_time": 10,
    "quality": "1080p",
    "use_gpu": 0
}

使用方法

1. 上传视频

将需要转码的视频文件上传到 vodoss/ 目录(默认路径)。

支持的视频格式:MP4、AVI、MOV、WMV、FLV、MKV

2. 配置转码参数

访问 settings.php 页面,配置以下参数:

  • 基础地址:生成的 M3U8 文件中使用的基础 URL
  • 切片时长:每个 TS 片段的时长(秒),默认 10 秒
  • 截图时间点:生成截图的时间点(秒),默认 10 秒
  • 画质选择:选择输出视频的画质(原始、1080p、720p)
  • 使用 GPU 加速:是否使用 GPU 进行转码加速
  • FFmpeg 路径:指定 FFmpeg 的执行路径
  • 目录设置:设置输入输出目录

3. 开始转码

  1. 访问 transcode.php 页面
  2. 在服务器文件列表中找到需要转码的视频文件
  3. 点击 "开始转码" 按钮
  4. 系统会自动跳转到 history.php 页面查看转码进度

4. 查看转码结果

转码完成后,可以在以下位置查看结果:

  • 输出目录m3u8/ 目录下会生成对应视频的子目录
  • 播放文件m3u8/[视频名称]/index.m3u8
  • 视频片段m3u8/[视频名称]/*.ts
  • 视频截图m3u8/[视频名称]/index.jpg

5. 播放转码后的视频

系统提供了内置的播放器,访问:

  • open/m3u8/ 目录查看播放示例
  • 或使用支持 HLS 格式的播放器(如 VLC、DPlayer 等)

功能模块说明

1. 首页 (index.php)

  • 显示系统状态(FFmpeg 安装状态、GPU 检测状态)
  • 显示版本信息
  • 提供使用说明

2. 转码 (transcode.php)

  • 显示待转码目录路径
  • 列出服务器上的视频文件
  • 提供转码参数设置和开始转码功能

3. 记录 (history.php)

  • 显示当前转码任务的实时进度
  • 显示已完成的转码记录
  • 提供转码结果的查看和管理

4. 设置 (settings.php)

  • 配置转码参数(切片时长、截图时间、画质等)
  • 配置 FFmpeg 路径
  • 配置目录设置
  • 配置 GPU 加速选项

技术原理

转码流程

  1. 文件检测:检测上传的视频文件是否支持
  2. 参数设置:根据用户配置设置转码参数
  3. FFmpeg 调用:使用 FFmpeg 命令行工具进行视频处理
  4. 后台执行:转码过程在后台执行,不阻塞用户操作
  5. 结果处理:生成 M3U8 播放列表和视频截图
  6. 记录更新:更新转码记录和状态

核心命令

系统使用的主要 FFmpeg 命令示例:

# 视频转码切片(带 GPU 加速)
ffmpeg -hwaccel cuda -i input.mp4 -crf 23 -vf scale=1920:1080 -c:v h264_nvenc -hls_time 10 -hls_list_size 0 -hls_segment_filename output_%03d.ts output.m3u8

# 生成视频截图
ffmpeg -i input.mp4 -ss 10 -vframes 1 output.jpg

常见问题

1. FFmpeg 未检测到

解决方案

  • 确保 FFmpeg 已正确安装
  • 检查系统 PATH 环境变量是否包含 FFmpeg 路径
  • 在设置页面中指定 FFmpeg 的完整路径

2. GPU 加速不可用

解决方案

  • 确保显卡驱动已更新到最新版本
  • 检查显卡是否支持对应的加速方式
  • 确认 FFmpeg 是否编译了对应 GPU 加速的支持

3. 转码失败

解决方案

  • 检查视频文件是否损坏
  • 检查磁盘空间是否充足
  • 查看日志文件获取详细错误信息

4. 转码速度慢

解决方案

  • 启用 GPU 加速
  • 选择较低的画质设置
  • 增加切片时长

版本信息

  • 开发环境:PHP 7.4 + Windows 10 + FFmpeg 5.0+

注意事项

  1. 性能考量:视频转码是 CPU/GPU 密集型操作,请根据服务器配置合理安排转码任务
  2. 磁盘空间:转码过程会生成临时文件,请确保磁盘空间充足
  3. 权限设置:确保相关目录具有写入权限
  4. 安全风险:请勿转码来源不明的视频文件,避免版权问题
  5. 系统兼容性:当前版本主要针对 Windows 系统优化

更新日志

V0.0.1

  • 初始版本发布
  • 支持基本的视频转码切片功能
  • 支持 GPU 加速
  • 提供完整的 Web 管理界面

许可证

本项目采用 MIT 许可证,详见 LICENSE 文件。

联系方式

如有问题或建议,欢迎联系我们:


FFmpegPHP - 让视频转码变得简单高效!

About

用PHP的简单系统,完成FFmpeg对视频的切片转码处理!

Resources

License

Stars

Watchers

Forks

Packages

No packages published