Ubuntu安装FFmpeg以及用php简单调用ffmpeg

admin 2022-12-29 11:33:11 2334

FFmpeg是一种自由的开源命令行工具,用于对多媒体文件进行格式转换。它包含一组共享的音频和视频库,例如libavcodec,libavformat和libavutil。

使用FFmpeg,您可以在各种视频和音频格式之间转换,设置采样率并调整视频大小。

为了能够在Ubuntu系统上添加新的存储库并安装软件,您必须以具有sudo权限的用户身份登录。

官方的Ubuntu存储库包含FFmpeg软件包,可以使用apt软件包管理器进行安装。这是在Ubuntu安装FFmpeg的最简单方法,但是存储库中包含的版本可能落后于最新版本的FFmpeg。

在撰写本文时,Ubuntu 18.04存储库中可用的FFmpeg的当前版本为3.3.3。如果你需要安装安装FFmpeg 3.x。可以运行以下命令。

首先更新软件包列表,运行命令sudo apt update。接下来,运行命令sudo apt install ffmpeg安装FFmpeg以下命令。

安装完成后,运行ffmpeg -version命令验证软件包是否已正确安装,该命令将打印FFmpeg版本。

也可以运行ffmpeg -encoders命令打印所有可用的FFmpeg编码器和解码器来验证。FFmpeg 3.x现在已安装在您的系统上。

安装直接用 apt 安装即可,源码安装比较麻烦

sudo apt update
sudo apt install ffmpeg
ffmpeg -decoders
ffmpeg -version

对了,涉及到本地开发,可能你本地也得安装ffmpeg,比如mac下,可以直接brew安装,命令如下:

brew install ffmpeg

转换mp4 webm

使用ffmpeg转换音频和视频文件时,不必指定输入和输出格式。 FFmpeg自动检测输入文件的格式,并从文件扩展名中猜测输出格式。

以下是两个简单的示例,将视频文件从mp4转换为webm。将音频文件从mp3转换为ogg。

ffmpeg -i input.mp4 output.webm
ffmpeg -i input.mp3 output.ogg

指定编解码器

转换文件时,使用-c选项指定编解码器。它可以是任何受支持的解码器/编码器的名称,也可以是仅复制输入流的特殊值copy

下面的例子,使用libvpx视频编解码器和libvorbis音频编解码器将视频文件从mp4转换为webm。使用libopus编解码器将音频文件从mp3转换为ogg。

ffmpeg -i input.mp4 -c:v libvpx -c:a libvorbis output.webm
ffmpeg -i input.mp3 -c:a libopus output.ogg

PHP调用ffmpeg

微信公众号开发文档里有个录音转文字功能,录音可以直接传到临时素材,但是录音格式是amr的,iOS系统下不支持,如果你想实现录音和文字同时展示给用户的话,你就得把amr转下格式才行。

当前端将录音数据 serverId(返回音频的服务器端ID)传递给后端,后端利用下方接口获取微信服务器存储的录音数据。

获取临时素材,很简单,代码如下(这里用的easywechat配合laravel)

    /**
     * 获取临时素材
     * https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Get_temporary_materials.html
     * @param  string|null  $media_id
     * @return string|bool
     */
    public function getTemporaryMedia(string $media_id=null): bool|string
    {
        if(empty($media_id)) return false;
        return "https://api.weixin.qq.com/cgi-bin/media/get?access_token=" . $this->getAccessToken() . "&media_id=$media_id";
    }

调用获取临时素材接口,获取数据后将文件存储到自己服务器上,存储的音频格式为amr。下面,我们要下载这个amr并转化为mp3,然后传到自己的oss里。

代码如下(这里用的laravel,代码不完整,仅供参考)

    /**
     * 保存微信素材到 Oss
     * @param $media_id
     * @return string
     */
    public function mpMediaToOss($media_id): string
    {
        $media = WechatService::instance()->getTemporaryMedia($media_id);
        if(empty($media)) return '';
        // 下载微信临时素材
        $file = Http::get($media);
        $file_name = $file->header('Content-disposition');
        $partnner = '!filename="(.*)"!';
        preg_match_all($partnner, $file_name, $match);
        $file_name = $match  [1]  [0]??$media_id;
        // 保存临时素材到本地
        $local = storage_path('app/').$file_name;//本地路径
        file_put_contents($local,$file->body());//保存文件到本地
        //转换音频格式(iOS不支持amr,这里转成mp3)
        $path_info = pathInfo($local);
        $mp3 = "{$path_info  ['dirname']}/{$path_info  ['filename']}.mp3";
        $mp3_name = "{$path_info  ['filename']}.mp3";
        $command = "ffmpeg -i " . $local . " " . $mp3 . " 2>&1";
        exec($command);
        // 保存临时素材到 oss
        $file = new UploadedFile($mp3,$mp3);
        $dir = "operation_voices";//oss 存储路径
        $disk = Storage::disk('oss');
        $result = $disk->putFileAs($dir, $file,$mp3_name);
        if($result){
            @unlink($local);@unlink($mp3);//删除本地文件
            $config = Config::get('filesystems.disks.oss');
            return "{$config  ['base_url']}/{$result}";
        }
        @unlink($local);@unlink($mp3);//删除本地文件
        return $media_id;
    }

本文的重点是如何调用ffmpeg转化格式,截取上面代码如下:

        //转换音频格式(iOS不支持amr,这里转成mp3)
        $path_info = pathInfo($local);
        $mp3 = "{$path_info  ['dirname']}/{$path_info  ['filename']}.mp3";
        $mp3_name = "{$path_info  ['filename']}.mp3";
        $command = "ffmpeg -i " . $local . " " . $mp3 . " 2>&1";
        exec($command);
可爱猫?Telegram电报群 https://t.me/ikeaimao

社区声明 1、本站提供的一切软件、教程和内容信息仅限用于学习和研究目的
2、本站资源为用户分享,如有侵权请邮件与我们联系处理敬请谅解!
3、本站信息来自网络,版权争议与本站无关。您必须在下载后的24小时之内,从您的电脑或手机中彻底删除上述内容
最新回复 (0)

您可以在 登录 or 注册 后,对此帖发表评论!

返回