首页 > 解决方案 > 使用 PHP-FFMpeg 调整视频大小并保留编解码器

问题描述

我正在尝试使用 PHP-FFMpeg 调整几个视频(使用不同的编解码器)的大小。官方文档给出了以下示例(参见https://github.com/PHP-FFMpeg/PHP-FFMpeg

$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open('video.mpg');
$video
    ->filters()
    ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
    ->synchronize();
$video
    ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
    ->save('frame.jpg');
$video
    ->save(new FFMpeg\Format\Video\X264(), 'export-x264.mp4')
    ->save(new FFMpeg\Format\Video\WMV(), 'export-wmv.wmv')
    ->save(new FFMpeg\Format\Video\WebM(), 'export-webm.webm');

由于我不想指定编解码器(与源文件相同),因此我试图创建一个复制格式并将此格式用于save命令。

class MOVFormat extends FFMpeg\Format\Video\DefaultVideo
{
    public function __construct($audioCodec = 'copy', $videoCodec = 'copy')
    {
        $this
            ->setAudioCodec($audioCodec)
            ->setVideoCodec($videoCodec);
    }

    public function supportBFrames()
    {
        return false;
    }

    public function getAvailableAudioCodecs()
    {
        return ['copy'];
    }

    public function getAvailableVideoCodecs()
    {
        return ['copy'];
    }
}

这导致Filtergraph '[in]scale=320:240 [out]' was defined for video output stream 0:0 but codec copy was selected.Filtering and streamcopy cannot be used together.

从技术上讲,如果我查看此回复,应该可以在不指定编解码器的情况下调整大小:https ://superuser.com/a/624564

任何帮助表示赞赏!

标签: phpvideoffmpeg

解决方案


推荐阅读