You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP-FFMpeg中实现filter_complex?附FFmpeg命令示例

在PHP-FFMpeg中实现filter_complex拼接视频片段

嘿,我帮你把这条FFmpeg命令转换成PHP-FFMpeg里的filter_complex实现,直接就能用啦!先拆解下原命令的逻辑:它把视频里4个1秒的片段分成两组拼接,最后再把两组合并成最终输出。下面是对应的代码和细节说明:

require 'vendor/autoload.php';

use FFMpeg\FFMpeg;
use FFMpeg\Filters\Video\ComplexFilter;

// 初始化FFMpeg实例(根据你的服务器环境调整路径)
$ffmpeg = FFMpeg::create([
    'ffmpeg.binaries'  => '/usr/bin/ffmpeg',
    'ffprobe.binaries' => '/usr/bin/ffprobe',
]);

// 加载输入视频文件
$video = $ffmpeg->open('test.mp4');

// 创建复杂滤镜容器
$complexFilter = new ComplexFilter();

// 对应原命令:[0:v]trim=start=10:end=11,setpts=PTS-STARTPTS[a]
$trim1 = $video->getStream('v')->addFilter('trim=start=10:end=11');
$trim1->addFilter('setpts=PTS-STARTPTS')->setAlias('a');
$complexFilter->addStream($trim1);

// 对应原命令:[0:v]trim=start=20:end=21,setpts=PTS-STARTPTS[b]
$trim2 = $video->getStream('v')->addFilter('trim=start=20:end=21');
$trim2->addFilter('setpts=PTS-STARTPTS')->setAlias('b');
$complexFilter->addStream($trim2);

// 对应原命令:[a][b]concat[c]
$concatGroup1 = $complexFilter->addFilter('concat=n=2:v=1:a=0')->setAlias('c');
$concatGroup1->addInput('a')->addInput('b');

// 对应原命令:[0:v]trim=start=30:end=31,setpts=PTS-STARTPTS[d]
$trim3 = $video->getStream('v')->addFilter('trim=start=30:end=31');
$trim3->addFilter('setpts=PTS-STARTPTS')->setAlias('d');
$complexFilter->addStream($trim3);

// 对应原命令:[0:v]trim=start=40:end=41,setpts=PTS-STARTPTS[f]
$trim4 = $video->getStream('v')->addFilter('trim=start=40:end=41');
$trim4->addFilter('setpts=PTS-STARTPTS')->setAlias('f');
$complexFilter->addStream($trim4);

// 对应原命令:[d][f]concat[g]
$concatGroup2 = $complexFilter->addFilter('concat=n=2:v=1:a=0')->setAlias('g');
$concatGroup2->addInput('d')->addInput('f');

// 对应原命令:[c][g]concat[out1]
$finalConcat = $complexFilter->addFilter('concat=n=2:v=1:a=0')->setAlias('out1');
$finalConcat->addInput('c')->addInput('g');

// 应用滤镜并输出结果
$video->addFilter($complexFilter);
$video->save(new \FFMpeg\Format\Video\X264(), 'testout.mp4');

关键细节说明:

  • 每个trim+setpts组合对应原命令里的片段提取,用setAlias来标记原命令中的[a]、[b]等别名,确保滤镜链的输入输出能正确匹配;
  • concat滤镜的参数n=2表示输入流数量,v=1表示只处理视频流,a=0表示忽略音频(如果需要保留音频,可改为a=1,并同步处理音频流的裁切和拼接);
  • 初始化FFMpeg时的路径要根据你的环境调整,Windows环境下路径类似C:/ffmpeg/bin/ffmpeg.exe;
  • 如果运行报错,优先检查FFmpeg日志,大概率是滤镜参数或别名匹配的问题。

内容的提问来源于stack exchange,提问作者Sergey Kozlov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:48:00