Skip to content
Advertisement

FFmpeg “Could not open file” error message when processing with PHP

I am using ffmpeg to get the image from several video files. I got my ffmpeg codes ready but I got the following error when I exec my codes.

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

I only show the error messages that have color highlighted. My code:

 $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);

It seems my Linux wants to me to switch to avconv. I am not sure how to fix these errors. Can someone give me a hint about it?

Advertisement

Answer

You should always show the full output and not cut out parts. In your example, the error would have been more apparent if you showed the actual ffmpeg command line that was executed instead of the whole PHP code around it.

In your case, your problem is that the command looks like:

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

However, /test/project is a folder, and not a valid output image path. You can use /text/project/image%04d.jpg if you want images being created from image0001.jpg onwards.

If you real goal is to just export one thumbnail, use the vframes option:

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

In newer ffmpeg, you can use -frames:v as well.


You can use the ffmpeg in Ubuntu, but it’s an old version. You can either use avconv from Libav or the original ffmpeg from FFmpeg — I would recommend compiling it from source.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement