如何使用ffmpeg从视频文件中提取图像

时间:2012-04-12 11:33:45

标签: ffmpeg

我需要从视频中获取一张图片作为缩略图使用 我正在尝试这个:

ffmpeg -ss 00:05:34.05 -i input.avi -vframes 1 -sameq output.jpg  

这很好用然而每隔一段时间我遇到一个文件失败时出现以下错误信息

av_interleaved_write_frame(): I/O error occurred  

通常这意味着输入文件被截断和/或损坏。

我有什么选择?
谢谢

4 个答案:

答案 0 :(得分:0)

如果您将第一帧中的一个提取为缩略图,我认为会更容易。

而不是-ss我使用-vf thumbnail = num_frame

ffmpeg -i input.avi -vf thumbnail=25 -vframes 1 -sameq output.jpg

答案 1 :(得分:0)

好吧这似乎对我有用 ffmpeg -itsoffset -4 -i test.avi -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 test.jpg

答案 2 :(得分:0)

尝试此命令

ffmpeg -ss 5 -i sample.mp4 -vframes 1 -s 320x240 -f image2 -y sample.jpg;

始终在-i之前设置-ss,以便在从长视频中抓取拇指时优化性能。

答案 3 :(得分:0)

是的,可以使用ffmpeg。

- 在您的服务器中安装ffmpeg   - 检查示例代码。

extension_loaded('ffmpeg') or die('Error in loading ffmpeg');

// $vid = realpath('./video/Wildlife.wmv');

$video_url = 'http://download.wavetlan.com/SVV/Media/HTTP/H264/Talkinghead_Media/H264_test1_Talkinghead_mp4_480x360.mp4';

$image_filename = 'images/' . time() . ".jpg";

$movie = new ffmpeg_movie($video_url, false);

$frameCount = $movie->getFrameCount();

$capPos = ceil($frameCount / 4);

$frameObject = $movie->getFrame($capPos);

if ($frameObject) {

    $frameObject->resize(500, 250, 0, 0, 0, 0);

    imagejpeg($frameObject->toGDImage());

} else {

    echo 'error';

}