vkr / ffmpeg-converter-bundle
用于处理FFMPEG多媒体转换的Symfony2/3包
Requires
- php: >=5.6
- symfony/symfony: ~2.8|~3.0
- vkr/custom-logger-bundle: ~1.2
Requires (Dev)
- phpunit/phpunit: >=5.4
README
这是一个简单的包,用于使用流行的FFMPEG库处理多媒体格式的转换。它依赖于VKRCustomLoggerBundle来运行。
安装
除了在AppKernel.php
中启用此包外,您还需要进行一些配置。
首先,将以下内容添加到parameters.yml
ffmpeg_path: /path/to/ffmpeg/executable
其次,您需要在config.yml
中添加FFMPEG参数到vkr_ffmpeg_converter
键下。可以有三组参数:video
、audio
和image
。在每组中,应有三个键:extension
对应于期望的目标文件扩展名,input
和output
是FFMPEG的一系列参数。
在FFMPEG中,与大多数其他命令行工具不同,参数不是幂等的,换句话说,参数的行为取决于其在参数列表中的位置。输入参数是位于源文件名之前,输出参数位于输入和输出文件名之间。有关详细信息,请参阅FFMPEG手册。
请注意,您无需在配置中指定-i
参数。
最后,您需要在app/logs
文件夹中创建一个日志文件,并使其可脚本写入。
使用
使用非常简单。只需在控制器中写下这行代码
$converter = $this->get('vkr_ffmpeg_converter.converter');
$sourceFile = new Symfony\Component\HttpFoundation\File\File('source/filename/with.path');
$destination = '/path/to/destination/dir/';
// corresponds to /app/logs/video_converter.log
$logFile = 'video_converter';
$converter->convertFile($sourceFile, $destination, $logFile);
您还可以向convertFile()
提供第四个参数,即最大输出文件长度(秒,与-t
输入参数相同)。
测试
强烈建议在编写生产代码之前运行此包附带的功能测试。功能测试将帮助您确定配置是否正确,以及此包是否与您的FFMPEG版本兼容。
目前,功能测试套件提供了WEBM和MP4以及JPEG和MP4之间的转换。没有音频转换可用。
要运行测试,请将以下内容添加到config_test.yml
文件中
imports:
- { resource: parameters_test.yml }
创建app/config/parameters_test.yml
文件,并添加以下内容
parameters:
vkr_ffmpeg_converter:
video:
extension: 'mp4'
input: ''
output: '-c:v libx264 -crf 20'
image:
extension: 'mp4'
input: '-loop 1'
output: '-c:v libx264 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2"'
运行phpunit -c app/ vendor/vkr/ffmpeg-converter-bundle/Tests
,查看所有测试是否为绿色。
在部署到实时服务器后重新运行测试。
已知限制
- 每种多媒体类型只有一个设置集。因此,您不能为不同的输入文件类型指定不同的参数或多种转换方式。
- 只能有一个输入文件。因此,您不能进行将多个文件粘合在一起等操作。