我知道我知道,为什么我还在使用 MP4?这是因为我已经有 100 个这种格式的文件,我需要上传到一个网站,我已经在网站中嵌入了 mp4 文件,并且播放的文件根据 php.ini 更改。
但我真正需要的是一种动态创建缩略图或拍摄视频文件快照以显示在页面上的方法。我在网上阅读了几篇文章,但它们都要求文件类型为 FLV,实现此目的的最佳方法是什么?
谢谢你们!
我知道我知道,为什么我还在使用 MP4?这是因为我已经有 100 个这种格式的文件,我需要上传到一个网站,我已经在网站中嵌入了 mp4 文件,并且播放的文件根据 php.ini 更改。
但我真正需要的是一种动态创建缩略图或拍摄视频文件快照以显示在页面上的方法。我在网上阅读了几篇文章,但它们都要求文件类型为 FLV,实现此目的的最佳方法是什么?
谢谢你们!
你看过ffdshow吗?您可以对其进行编程,包括捕获缩略图。
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();
}
}
我使用 FFMpegFrameGrabber 使用这个 Java 代码来创建视频的缩略图。试试看。
Maven依赖:
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>0.8</version>
</dependency>