javer/ffmpeg-transformer

FFmpeg 转换命令构建器

v1.3.1 2021-05-25 18:19 UTC

This package is auto-updated.

Last update: 2024-08-29 04:31:39 UTC


README

此库简化了PHP应用程序中媒体文件复杂转码的FFmpeg使用。

特性

  • FFmpeg命令构建器
  • 媒体配置文件构建器
  • 配置文件转换器
  • 命令转换器

要求

安装

使用composer安装库

composer require javer/ffmpeg-transformer

FFmpeg命令构建器

允许以面向对象的方式构建FFmpeg命令行。

例如,要将源媒体文件重新编码为mp4/h264/aac等任何格式/编解码器,只需编写

$command = (new Command())
    ->overwriteOutputFiles();

$inputFile = $command->addInput('input.mov');

$command->addOutput('output.mp4')
    ->moveHeaderToStart()
    ->addVideoStream($inputFile->getVideoStream())
        ->codec('libx264')
        ->preset('veryfast')
        ->pixelFormat('yuv420p')
    ->end()
    ->addAudioStream($inputFile->getAudioStream())
        ->codec('aac')
    ->end();

要构建执行此转换的命令行,只需调用 $command->build(),它将返回实现目标的所有命令行参数数组

[
    '-y',
    '-i', 'input.mov',
    '-movflags', 'faststart',
    '-map', '0:v:0', '-c:v:0', 'libx264', '-preset', 'veryfast', '-pix_fmt:v:0', 'yuv420p',
    '-map', '0:a:0', '-c:a:0', 'aac',
    'output.mp4',
]

更多示例可以在 CommandTest 中找到。

媒体配置文件构建器

允许您为指定的媒体文件或从给定的数组中创建 MediaProfile

从文件

$ffmpeg = new FFMpeg\FFMpeg(...);
$inputVideo = $ffmpeg->open($filename);
$inputMediaProfile = MediaProfile::fromMedia($inputVideo);

从数组

$referenceMediaProfile = MediaProfile::fromArray([
    'name' => 'reference',
    'format' => 'mp4',
    'video' => [
        'width' => 1920,
        'height' => 1080,
        'codec' => 'h264',
        'profile' => 'main',
        'preset' => 'veryfast',
        'pixel_format' => 'yuv420p',
        'bitrate' => '6000k',
        'frame_rate' => 29.97,
        'keyframe_interval' => 250,
    ],
    'audio' => [
        'codec' => 'aac',
        'bitrate' => '128k',
        'sample_rate' => '48k',
    ],
]);

配置文件转换器

计算应用于输入MediaProfile的转换(通常为参考)。

$transformation = (new ProfileTransformer())
    ->transformMedia($sourceMediaProfile, $referenceMediaProfile);

它返回一个包含仅应更改的必要参数的新 MediaProfile

命令转换器

构建FFmpeg命令以执行必要的转换(从上一步)以将输入媒体文件转换为输出媒体文件。

$command = (new CommandTransformer())
    ->applyTransformation($transformation, $inputFilename, $outputFilename);

它返回一个 Command(见第一部分),该命令应由ffmpeg运行以将输入媒体文件转换为参考。

$ffmpeg->getFFMpegDriver()->command($command->build());