2014-03-24 135 views
0

我在一个laravel项目中使用php ffmpeg,来完成多个事物的探测,提取帧和编码。从上传的视频文件创建帧时,我遇到问题。 这是怎样的框架中创建:从视频中提取帧 - PHP-FFMpeg

$video = $ffmpeg->open($destinationPath.'/'.$filename); 

    $video 
     ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10)) 
     ->save(public_path().$frame_path); 

这有时工作,并创建框架,但其他时候是没有的。我注意到当我试图打开一个.mov文件时出现这个错误。

回答

2

这有可能是你的ffmpeg的版本不支持在源视频文件使用编解码器,因此它是不能够解压缩视频和提取图像。

你可以尝试在命令行处理文件,看看是否可以提取图像那样,和ffmpeg的可能会给你对这个问题的更多信息。

一个示例命令行从视频文件

ffmpeg -y -ss 30 -i [source_file] -vframes 1 [target_file] 

提取PNG帧添加-f image2作为输出选项,如果您的输出名称是一个变量。

+0

它的问题,如果我现在用的文件都有扩展的资本,像.MOV? – cch

+1

除非您正在访问大小写敏感(大部分是)文件系统上大小写错误的文件,否则大小写无关紧要。 – DorianFM

0

的PHP-FFmpeg的库附加默认这需要时间戳是在为了获得准确的帧输入文件之前-ss参数。在mkv文件的情况下,我遇到了这个问题。无法准确查找诸如mkv和mov之类的文件。

https://github.com/PHP-FFMpeg/PHP-FFMpeg/blob/master/src/FFMpeg/Media/Frame.php#L79

您需要通过true作为第二个参数保存功能,以便给最接近指定点的帧。它改变ffmpeg命令中-ss参数的位置。

-ss位置(输入/输出)

当作为(前-I)的输入选项一起使用,寻求在该输入文件到位置。请注意,在大多数格式中, 不可能精确查找,因此ffm​​peg将寻求位置前的最近查找点 。当代码转换和-accurate_seek启用 (默认值)时,搜索点和位置 之间的此额外片段将被解码并丢弃。在进行流式复制或使用 -noaccurate_seek时,它将被保留。

当作为(一个输出文件名之前)的输出选项一起使用,但解码丢弃 输入,直到到达时间戳位置。

位置必须是持续时间规范,请参阅ffmpeg-utils(1)手册中的(ffmpeg-utils) 持续时间部分。