PHP-FFmpeg切片视频

作者: admin 分类: php开发 发布时间: 2026-01-26 17:00

一、环境准备

1.安装FFmpeg本体

liunx:

sudo apt update && sudo apt install ffmpeg  # Debian/Ubuntu
#添加 EPEL 和 RPM Fusion 源
sudo yum install epel-release
sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm
#安装 FFmpeg
sudo yum install ffmpeg ffmpeg-devel  #  CentOS

Windows:
从 FFmpeg 官网 下载并配置环境变量。

2.通过 Composer 安装 PHP-FFmpeg

composer require php-ffmpeg/php-ffmpeg

二、PHP 切片代码

<?php
require 'vendor/autoload.php';

use FFMpeg\FFMpeg;
use FFMpeg\Format\Video\X264;

// 1. 定义输入输出路径
$inputFile = __DIR__ . '/input.mp4';      // 输入视频路径
$outputDir = __DIR__ . '/hls_output/';    // 输出目录
$outputM3U8 = $outputDir . 'video.m3u8';  // M3U8 文件路径

// 2. 创建输出目录(如果不存在)
if (!is_dir($outputDir)) {
    mkdir($outputDir, 0755, true);
}

// 3. 初始化 FFmpeg(重点检查路径!)
try {
    $ffmpeg = FFMpeg::create([
        'ffmpeg.binaries'  => '/usr/bin/ffmpeg',    // Linux 路径
        // 'ffmpeg.binaries' => 'C:\ffmpeg\bin\ffmpeg.exe', // Windows 路径
        'ffprobe.binaries' => '/usr/bin/ffprobe',
        'timeout'          => 3600, // 超时时间(秒)
    ]);
} catch (Exception $e) {
    die("FFmpeg 初始化失败: " . $e->getMessage());
}

// 4. 打开视频文件
try {
    $video = $ffmpeg->open($inputFile);
} catch (Exception $e) {
    die("无法打开视频文件: " . $e->getMessage());
}

// 5. 配置 HLS 参数
$format = new X264();
$format->setAdditionalParameters([
    '-hls_time', '10',//每个分片约10s
    '-hls_list_size', '0',
    '-c:v', 'copy',//复制流,速度更快
    '-c:a', 'copy',
    '-hls_segment_filename', $outputDir.'test%03d.ts'//分片文件名
]);

// 6. 执行转换
try {
    $video->save($format, $outputM3U8);
    echo "切片成功!M3U8 文件路径: " . realpath($outputM3U8);
} catch (Exception $e) {
    die("切片失败: " . $e->getMessage());
}

也可以使用命令行

ffmpeg -i /path/local/input.mp4 
        -codec:v libx264 -codec:a aac 
        -hls_time 10 
        -hls_list_size 0 
        -hls_flags delete_segments 
        -hls_segment_filename /path/local/video_%03d.ts 
        /path/local/playlist.m3u8

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

标签云