💭

PHP-FFMPEG#動画データの音声を削除する方法、ミュートにする方法

2024/02/19に公開

はじめに

PHP-FFMPEGを使って元動画からプレビュー用の動画を生成する際に音声データを消したいことがあったがドキュメントを探しても分からなかったので方法を残しておきます。

方法1

\FFMpeg\Filters\Audio\SimpleFilter(['-an'])を使う

-an オプションは音声を削除するFFMpegのオプション

-an ではなく-vn にすると動画が削除される

$ffmpeg = FFMpeg::create();
$video = $ffmpeg->open($pathfile);
$video->addFilter(new \FFMpeg\Filters\Audio\SimpleFilter(['-an']);
$video->save($format, $outputPathfile); 

参考

https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues/365

方法2

音声削除用のフィルターを自作してaddFileter() に入れる

$ffmpeg = FFMpeg::create();
$video = $ffmpeg->open($pathfile);
$video->addFilter(new VideoMuteFilter();
$video->save($format, $outputPathfile);
class VideoMuteFilter implements VideoFilterInterface
{
    /**
     * @var int
     */
    private int $priority;

    /**
     * A custom filter, useful if you want to build complex filters
     *
     * @param int    $priority  priority
     */
    public function __construct(int $priority = 0)
    {
        $this->priority = $priority;
    }

    /**
     * @return int
     */
    public function getPriority(): int
    {
        return $this->priority;
    }

    /**
     * @param \FFMpeg\Media\Video $video video
     * @param \FFMpeg\Format\VideoInterface $format format
     * @return array
     */
    public function apply(Video $video, VideoInterface $format): array
    {
        return ['-an'];
    }
}

環境

php-ffmpeg: v0.19.0

https://github.com/PHP-FFMpeg/PHP-FFMpeg

Discussion