首页 > 解决方案 > 使用 php ffmpeg 库对视频进行转码

问题描述

我需要上传 3 种格式/分辨率的视频,如 360p、480p、720p。

经过一些研究,我知道那里有一些付费服务,比如Amazone Elastic Transcoder。但我想做开源,所以我找到了FFMPEG

另外我想在转码和视频大尺寸后在Amazon s3上上传视频,比如视频可能包含1GB大小。

我有FFMPEG 库链接的 php 库

我已经安装了 ffmpeg 并成功生成了新视频。但我不知道如何生成不同的格式/分辨率为 360p、480p、720p

我的示例代码是

        error_reporting(E_ALL);
        ini_set('display_errors', 1);

        require 'vendor/autoload.php';

        //$ffmpeg = FFMpeg\FFMpeg::create();
        $video = $ffmpeg->open('assets/small.mp4');
        $video
            ->filters()
            ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
            ->synchronize();
        $video
            ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(2))
            ->save('assets/frame.jpg');

        $format = new FFMpeg\Format\Video\X264();
        $format->setAudioCodec("libmp3lame");

        $video->save($format, 'assets/new.mp4');

谁能建议我如何实现这一目标?

标签: phpamazon-s3ffmpegffmpeg-php

解决方案


我很确定您已经知道了这一点,但我将其放在这里以供将来参考。

// Create the formats in Kilo Bitrates
$_360p = (new FFMpeg\Format\Video\X264('libmp3lame'))->setKiloBitrate(500);
$_480p = (new FFMpeg\Format\Video\X264('libmp3lame'))->setKiloBitrate(750);
$_720p = (new FFMpeg\Format\Video\X264('libmp3lame'))->setKiloBitrate(1500);
// Open the video file
$video = $ffmpeg->open('assets/small.mp4')
                // Add all formats
                ->addFormat($_360p)
                ->addFormat($_480p)
                ->addFormat($_720p)
                // call the 'save' method with a filename...
                ->save('assets/new.mp4');

推荐阅读