经过一些测试后,看来这个错误与剪辑的视频直接相关。如果我拍摄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%?
是否有更优雅的方式来了解视频何时完成转码?
答案 0 :(得分:0)
经过一些测试后,看起来这个bug有一些事情要做 直接使用剪辑的视频。如果我拍摄100%的视频,那么 转码百分比上升至100%。如果我只拿走30%的 视频,然后转码百分比上升64-65%。
看来我对此是正确的。为了解决这个问题,我根据削减量计算了百分比差异。
//Where $max is length of the clipped video
//Where $duration is the length of the original video
$temp = ($max*100/$duration);
$percentLimit = (95-ceil($temp));
到目前为止,这似乎工作得很好。
if($percentage == $percentLimit) {
dump("$percentage % transcoded");
$ffmpegservice->concatWithOutro($videoExportPath, $videoExportPathFinal, $temporaryVideoPath);
}
它并不完美,但它确实有效。