javer / ffmpeg-transformer
FFmpeg 转换命令构建器
v1.3.1
2021-05-25 18:19 UTC
Requires
- php: >=8.0
- php-ffmpeg/php-ffmpeg: >=0.7
Requires (Dev)
- phpstan/phpstan: ^0.12.84
- phpunit/phpunit: ^9.3
- squizlabs/php_codesniffer: 3.6.*
- swivl/php-coding-standard: ^1.2
This package is auto-updated.
Last update: 2024-08-29 04:31:39 UTC
README
此库简化了PHP应用程序中媒体文件复杂转码的FFmpeg使用。
特性
- FFmpeg命令构建器
- 媒体配置文件构建器
- 配置文件转换器
- 命令转换器
要求
- PHP 8.0+
- 使用 php-ffmpeg/php-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());