2

我正在使用ffmpeg从多个视频文件中获取图像。我ffmpeg准备好我的代码,但是当我编写代码时出现以下错误exec

ffmpeg version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
built on Apr  2 2013 17:02:36 with gcc 4.6.3

*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
//files info...
//files info...
Incompatible pixel format 'yuv420p' for codec 'mjpeg', auto-selecting format 'yuvj420p'
//file info...
[buffer @ 0x1513c40] Buffering several frames is not supported. Please consume all available frames before adding a new one.
 Last message repeated 75 times
[image2 @ 0x1513460] Could not open file : /test/project
av_interleaved_write_frame(): Input/output error

我只显示颜色突出显示的错误消息。我的代码:

 $ffmpeg ="/usr/bin/ffmpeg";

 $image_source_path = '/test/project/test.mp4';
 $ALL_PLACE_WIDTH = 300;
 $ALL_PLACE_HEIGHT = 300;

 $image_cmd = " -r 1 -ss 00:00:10 -t 00:00:01 -s ".$ALL_PLACE_WIDTH."x".$ALL_PLACE_HEIGHT."   -f image2 " ;

 $dest_image_path = '/test/project';

 $str_command= $ffmpeg  ." -i " . $image_source_path . $image_cmd .$dest_image_path;
 shell_exec($str_command);

看来我的 Linux 想让我切换到avconv. 我不确定如何修复这些错误。有人可以给我一个提示吗?

4

2 回答 2

6

您应该始终显示完整的输出而不是剪切部分。ffmpeg在您的示例中,如果您显示执行的实际命令行而不是其周围的整个 PHP 代码,则错误会更加明显。

在您的情况下,您的问题是命令如下所示:

ffmpeg -i /test/project/test.mp4 -r 1 -ss 00:00:10 -t 00:00:01 -f image2 /test/project

但是,/test/project是一个文件夹,而不是有效的输出图像路径。/text/project/image%04d.jpg如果您想从头开始创建图像,则可以使用image0001.jpg

如果您的真正目标是只导出一个缩略图,请使用以下vframes选项:

ffmpeg -i /test/project/test.mp4 -r 1 -ss 00:00:10 -vframes 1 /test/project/image.jpg

在较新的版本ffmpeg中,您也可以使用-frames:v


您可以ffmpeg在 Ubuntu 中使用,但它是旧版本。您可以使用avconv来自Libavffmpeg或来自FFmpeg的原始文件——我建议从源代码编译它

于 2013-04-20T11:49:40.670 回答
2

我遇到了同样的问题,在我的情况下,我有错误的文件名(例如 00:00:00.png)所以它基本上是一个操作系统限制而不是 ffmpeg 希望这有帮助

于 2015-10-26T10:50:41.307 回答