如何使用 PHP-FFMpeg trim 将 4 个片段的视频缩短为 4 秒?
How to trim a video by 4 fragments to 4 seconds using the PHP-FFMpeg?
如何使用 PHP-FFMpeg trim 视频?
我需要执行以下 FFMpeg 命令:
ffmpeg -i 7207783801bb.mp4 -filter_complex \
"[0:v]trim=start=10:end=11,setpts=PTS-STARTPTS[a]; \
[0:v]trim=start=20:end=21,setpts=PTS-STARTPTS[b]; \
[a][b]concat[c]; \
[0:v]trim=start=30:end=31,setpts=PTS-STARTPTS[d]; \
[0:v]trim=start=40:end=41,setpts=PTS-STARTPTS[f]; \
[d][f]concat[g]; \
[c][g]concat[out1]" -map [out1] 7207783801bbout.mp4
当我使用以下代码时:
$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open('7207783801bb.mpg');
$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(10), FFMpeg\Coordinate\TimeCode::fromSeconds(11));
$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(20), FFMpeg\Coordinate\TimeCode::fromSeconds(21));
$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30), FFMpeg\Coordinate\TimeCode::fromSeconds(31));
$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(40), FFMpeg\Coordinate\TimeCode::fromSeconds(41));
$video->save(new FFMpeg\Format\Video\X264(), '7207783801bbout.mp4');
然后我只有 40 秒的视频。
我需要使用 PHP-FFMpeg 获得 10-11、20-21、30-31、40-41 秒。只有4秒。
Clip
The clip filter takes two
parameters:
$start, an instance of FFMpeg\Coordinate\TimeCode, specifies the start
point of the clip
$duration, optional, an instance of FFMpeg\Coordinate\TimeCode, specifies the duration of the clip
(强调我的)
所以你的第二个参数需要是 1 而不是(例如)11,因为它是剪辑持续时间...
$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(10),
FFMpeg\Coordinate\TimeCode::fromSeconds(1));
我这个案例FFMpeg\Media\AdvancedMedia可以用
$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->openAdvanced(['7207783801bb.mp4']);
$video->filters()
->custom('[0:v]', 'trim=start=10:end=11,setpts=PTS-STARTPTS', '[a]')
->custom('[0:v]', 'trim=start=20:end=21,setpts=PTS-STARTPTS', '[b]')
->custom('[a][b]', 'concat', '[c]')
->custom('[0:v]', 'trim=start=30:end=31,setpts=PTS-STARTPTS', '[d]')
->custom('[0:v]', 'trim=start=40:end=41,setpts=PTS-STARTPTS', '[f]')
->custom('[d][f]', 'concat', '[g]')
->custom('[c][g]', 'concat', '[out1]')
;
$video
->map(['[out1]'], new \FFMpeg\Format\Video\X264(), '7207783801bbout.mp4')
->save();
如何使用 PHP-FFMpeg trim 视频? 我需要执行以下 FFMpeg 命令:
ffmpeg -i 7207783801bb.mp4 -filter_complex \
"[0:v]trim=start=10:end=11,setpts=PTS-STARTPTS[a]; \
[0:v]trim=start=20:end=21,setpts=PTS-STARTPTS[b]; \
[a][b]concat[c]; \
[0:v]trim=start=30:end=31,setpts=PTS-STARTPTS[d]; \
[0:v]trim=start=40:end=41,setpts=PTS-STARTPTS[f]; \
[d][f]concat[g]; \
[c][g]concat[out1]" -map [out1] 7207783801bbout.mp4
当我使用以下代码时:
$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open('7207783801bb.mpg');
$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(10), FFMpeg\Coordinate\TimeCode::fromSeconds(11));
$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(20), FFMpeg\Coordinate\TimeCode::fromSeconds(21));
$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30), FFMpeg\Coordinate\TimeCode::fromSeconds(31));
$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(40), FFMpeg\Coordinate\TimeCode::fromSeconds(41));
$video->save(new FFMpeg\Format\Video\X264(), '7207783801bbout.mp4');
然后我只有 40 秒的视频。 我需要使用 PHP-FFMpeg 获得 10-11、20-21、30-31、40-41 秒。只有4秒。
Clip
The clip filter takes two parameters:
$start, an instance of FFMpeg\Coordinate\TimeCode, specifies the start point of the clip
$duration, optional, an instance of FFMpeg\Coordinate\TimeCode, specifies the duration of the clip
(强调我的)
所以你的第二个参数需要是 1 而不是(例如)11,因为它是剪辑持续时间...
$video->filters()->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(10),
FFMpeg\Coordinate\TimeCode::fromSeconds(1));
我这个案例FFMpeg\Media\AdvancedMedia可以用
$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->openAdvanced(['7207783801bb.mp4']);
$video->filters()
->custom('[0:v]', 'trim=start=10:end=11,setpts=PTS-STARTPTS', '[a]')
->custom('[0:v]', 'trim=start=20:end=21,setpts=PTS-STARTPTS', '[b]')
->custom('[a][b]', 'concat', '[c]')
->custom('[0:v]', 'trim=start=30:end=31,setpts=PTS-STARTPTS', '[d]')
->custom('[0:v]', 'trim=start=40:end=41,setpts=PTS-STARTPTS', '[f]')
->custom('[d][f]', 'concat', '[g]')
->custom('[c][g]', 'concat', '[out1]')
;
$video
->map(['[out1]'], new \FFMpeg\Format\Video\X264(), '7207783801bbout.mp4')
->save();