как создать систему миниатюр для файлов MP4 - PullRequest
1 голос
/ 08 марта 2010

Я знаю, я знаю, почему я все еще использую MP4 ?? Это потому, что у меня уже есть 100 файлов в этом формате, и мне нужно загрузить их на веб-сайт, у меня уже есть встроенный файл mp4, и воспроизводимый файл изменяется в соответствии с php.

но мне действительно нужен способ динамического создания миниатюры или создания снимка видеофайла для отображения на странице. Я прочитал несколько вещей в Интернете, но все они требуют, чтобы тип файла был в FLV, что было бы лучшим способом сделать это?

Спасибо, ребята!

Ответы [ 2 ]

0 голосов
/ 22 февраля 2017
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();
    }
}

Я использовал этот Java-код, используя FFMpegFrameGrabber, для создания видеороликов. Попробуйте.

Зависимость Maven:

<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv</artifactId>
    <version>0.8</version>
</dependency>
0 голосов
/ 08 марта 2010

Вы смотрели на ffdshow ? Вы можете запрограммировать против него, включая захват миниатюр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...