编辑
经过一些测试,这个错误似乎与剪辑的视频直接有关。如果我拍摄 100% 的视频,那么转码的百分比会上升到 100%。如果我只拍摄 30% 的视频,那么转码的百分比会上升到 64-65%。
介绍
我正在为我的 symfony3 项目使用https://github.com/PHP-FFMpeg/PHP-FFMpeg 。通过作曲家安装。
当视频完成转码后(当转码百分比达到 100% 时)我想对刚刚创建的视频开始另一种类型的操作。
问题
但是,当我剪辑视频时,我似乎永远不会达到 100%。它似乎每次都停在65%。
$format->on('progress', function ($video, $format, $percentage) use ($videoExportPath, $temporary_video_path) {
//This part never goes past 65%...
dump("$percentage % transcoded");
if($percentage == 100) {
//never enters this part..
dump("$percentage % transcoded");
$video = $this->ffmpeg->open($videoExportPath);
$filterConcat = new ConcatVideoFilter();
$filterConcat->addFile($temporaryVideoPath);
dump("second video...");
$video
->addFilter($filterConcat)
->save($this->createNewMP4Format(), $videoExportPath);
}
});
我查看了 lib 以查看导致此问题的原因,但不幸的是我找不到任何迹象。X264 格式扩展到创建进度侦听器的 DefaultVideo 类。这是执行此操作的确切功能。
public function createProgressListener(MediaTypeInterface $media, FFProbe $ffprobe, $pass, $total)
{
$format = $this;
$listeners = array(new VideoProgressListener($ffprobe, $media->getPathfile(), $pass, $total));
foreach ($listeners as $listener) {
$listener->on('progress', function () use ($format, $media) {
$format->emit('progress', array_merge(array($media, $format), func_get_args()));
});
}
return $listeners;
}
问题
是的,我想要创建的第一个视频实际上被正确剪辑。剪辑视频(减少视频长度)是否与转码百分比永远不会达到 100% 有关?
有没有更优雅的方法来知道视频何时完成转码?