如何为MP4文件创建缩略图系统

时间:2010-03-08 17:45:12

标签: file video mp4 thumbnails

我知道我知道,为什么我还在使用MP4?这是因为我已经有100个文件已经采用这种格式,我需要上传到网站,我已经将mp4文件嵌入到网站中,播放的文件也会根据php进行更改。

但我真正需要的是一种动态创建缩略图或拍摄视频文件快照以在页面上显示的方法。我在线阅读了一些内容,但它们都要求文件类型为FLV,最好的方法是什么?

谢谢你们!

2 个答案:

答案 0 :(得分:0)

你看过ffdshow了吗?您可以对其进行编程,包括捕获缩略图。

答案 1 :(得分:0)

break

我使用FFMpegFrameGrabber使用此Java代码来创建视频的thumnails。尝试一下。

Maven依赖:

package com.tape.controller;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.imageio.ImageIO;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.OpenCVFrameGrabber;

public class VideoThumbTaker {

    protected String ffmpegApp;

    public VideoThumbTaker(String ffmpegApp)
    {
        this.ffmpegApp = ffmpegApp;
    }

    public void getThumb(String videoFilename, String thumbFilename, int width, int height,int hour, int min, float sec)
      throws IOException, InterruptedException
    {
        ProcessBuilder processBuilder = new ProcessBuilder(ffmpegApp, "-y", "-i", videoFilename, "-vframes", "1",
    "-ss", hour + ":" + min + ":" + sec, "-f", "mjpeg", "-s", width + "*" + height, "-an", thumbFilename);
        Process process = processBuilder.start();
        InputStream stderr = process.getErrorStream();
        InputStreamReader isr = new InputStreamReader(stderr);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while ((line = br.readLine()) != null);
        process.waitFor();
    }

    public static void main(String[] args) throws Exception, IOException
    {
        FFmpegFrameGrabber g = new FFmpegFrameGrabber("C:\\JavaEE\\New Project\\tape\\src\\main\\webapp\\web-resources\\videos\\vid.mp4");
        g.setFormat("mp4");
        g.start();

        for (int i = 0 ; i < 50 ; i++) {
            ImageIO.write(g.grab().getBufferedImage(), "png", new File("C:\\JavaEE\\New Project\\tape\\src\\main\\webapp\\web-resources\\thumbnails\\video-frame-" + System.currentTimeMillis() + ".png"));
        }

         g.stop();
    }
}