本文概述
- 1.安装FFMpeg二进制文件
- 2.安装PHP FFMpeg
- 3.转换视频
有时, 由于各种原因, 你的用户将需要在浏览器外部录制的视频, 并且你的项目可能还需要通过简单地将视频转换为mp4版本, 从而为此类用户提供支持, 使其也可以在多个平台上播放。在本文中, 我们将与你分享一个有用的片段, 该片段使用PHP FFMpeg轻松将webm视频转换为mp4。
1.安装FFMpeg二进制文件 第一步, 你需要在开发计算机上安装FFMpeg。 FFmpeg是领先的多媒体框架, 能够解码, 编码, 转码, mux, demux, 流, 过滤和播放人类和机器创建的几乎所有内容。它支持最模糊的古代格式, 直至最前沿。无论它们是由某些标准委员会, 社区还是公司设计的。它还具有高度的可移植性:FFmpeg可以在各种构建环境, 机器体系结构和配置下, 跨Linux, Mac OS X, Microsoft Windows, BSD, Solaris等编译, 运行并通过我们的测试基础架构FATE。
为了将视频从webm转换为mp4, 我们将运行一些命令, 使你可以使用第三方PHP PHP库来实现此目的。你可以在其他平台上安装FFMpeg:
视窗
要在Windows中使用ffmpeg, 你需要从该网站下载二进制文件。如果你在窗口中, 还需要从路径中获得ffmpeg命令, 例如, 你应该能够在命令提示符下运行ffmpeg -version命令来打印ffmpeg的版本:
文章图片
如果你不想在Windows中将可执行文件添加为环境变量, 则可以稍后在使用PHP创建ffmpeg实例的过程中设置二进制路径:
$ffmpeg = FFMpeg\FFMpeg::create(array('ffmpeg.binaries'=>
'/opt/local/ffmpeg/bin/ffmpeg', 'ffprobe.binaries' =>
'/opt/local/ffmpeg/bin/ffprobe', 'timeout'=>
3600, // The timeout for the underlying process'ffmpeg.threads'=>
12, // The number of threads that FFMpeg should use), $logger);
的Ubuntu
只需从终端运行以下命令:
sudo apt-get install ffmpeg
有关在其他操作系统上安装的更多信息和步骤, 请访问ffmpeg网站的官方下载页面。
2.安装PHP FFMpeg 为了使用PHP与FFMpeg进行交互, 你将需要编写自己的ffmpeg命令以使用shell_exec来执行它们, 或者使用为你执行此操作的库。我们正在谈论PHP-FFMpeg, 这是一个面向对象的库, 使你可以使用友好的开发人员语法使用FFmpeg / AVConv转换视频/音频文件。在Symfony项目中安装此库的首选方法是使用composer。
要将包装器添加到项目中, 请在终端(位于symfony项目的根目录中)中执行以下命令:
composer require php-ffmpeg/php-ffmpeg
【如何在Symfony 3中使用FFMpeg将webm视频转换为mp4】安装后, 你将能够使用该库的名称空间。
3.转换视频 现在, 你已经在开发计算机上安装了ffmpeg并使用PHP编写了转换逻辑的包装器, 我们终于可以继续使用代码对其进行转换了。第一步, 你需要包括ffmpeg必需的名称空间, 在这种情况下, 我们只需要FFMpeg工具和x264类即可将视频转换为Mp4。你需要创建FFMpeg的静态实例并将其存储到变量中, 你可以按照文档中提到的方法在此方法中提供其他设置。
接下来, 你需要获取要转换的webm视频的绝对路径, 并将其作为我们先前创建的媒体处理对象的open方法的第一个参数提供。此方法返回一个Video对象, 该对象可用于保存, 进行修改等。在这种情况下, 我们只想将其保存为另一种格式, 因此你将需要创建X264编解码器的实例并将其作为第一个参数提供视频的保存方法。作为第二个参数, 你需要提供新mp4文件的目标路径, 仅此而已!
注意 作为《我们的代码世界》中的每个代码示例, 我们都尽可能地简单地编写它, 以使每个人都能理解它。你显然可以将其创建为一项服务, 以使你的控制器保持精简。
<
?phpnamespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException;
// Use the FFMpeg tooluse FFMpeg\FFMpeg;
use FFMpeg\Format\Video\X264;
class DefaultController extends Controller{/*** @Route("/", name="homepage")*/public function indexAction(Request $request){// Create an instance of FFMpeg$ffmpeg =FFMpeg::create();
// In this example we have a path for the videos$videosDirectory = $this->
get('kernel')->
getRootDir() . '/../web/uploads';
// Open the webm video providing the absolute path$video = $ffmpeg->
open($videosDirectory . '/video.webm');
// Configure the new mp4 formax (x264)$mp4Format = new X264();
// Fix for error "Encoding failed : Can't save to X264"// See: https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues/310$mp4Format->
setAudioCodec("libmp3lame");
// Save the video in the same directory with the new format$video->
save($mp4Format, $videosDirectory . '/video.mp4');
return new Response("webm video succesfully converted to mp4");
}}
访问以前的控制器的索引路由后, 现在在uploads目录中应该有2个文件, 原始的webm视频和新版本的mp4格式。
编码愉快!
推荐阅读
- 如何在Symfony 2和3中的模板上使用Twig执行原则查询
- C#中的String和string关键字有什么区别
- 如何在Twig中将日期时间对象格式化为ISO 8601
- 如何使用Symfony 3中的免费GeoLite数据库从访问者的IP中检测城市,国家和地区
- 如何检查用户是否已经选中了Google Recaptcha复选框
- 感悟|Java后端学习体系(韩顺平)
- Aria2怎样下载百度云?Aria2下载百度云运用图文详细教程
- 360压缩如何加密?360压缩加密办法列表
- 雷电安卓模拟器程序多开图文程图文详细教程