如何把上传的视频用该视频的第一帧的缩略图显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何把上传的视频用该视频的第一帧的缩略图显示相关的知识,希望对你有一定的参考价值。

好难啊.....看网上说用什么ffmpeg,但是那只是个 截图软解啊//

你的这个需求是能实现的,事先的原理是:视频网站的自定义视频缩略图功能,在这里以优酷视频为例说明:

1、登录账号,进入到个人视频中心,点击视频后面的编辑

2、选择“自选封面”-然后开始播放视频,在刚开始的地方,暂停视频,然后点击下面的截图。一定要在刚开始播放的就暂停,也可以在视频播放的时候,暂停住,往回拖动指针到第一帧。

3、截图之后,点击确认。

4、然后左边的封面就换成我们修改的了。输入修改验证码,点击保存即可。

参考技术A 自己都百度到了 使用ffmpeg 以前做过 是可以的 你百度下具体的。其实就是使用ffmpeg 截第一帧的图片 然后保存在服务端 同时根据需求写入数据库数据 然后在页面上显示出来. 参考技术B 想什么呢 自己截图吧 参考技术C 只是大概知道了.但是具体怎么搞..那个软件下什么版本.代码都不知道

通过 ffmpeg 获取视频第一帧(指定时间)图片

最近做一个上传教学视频的方法,上传视频的同时需要上传视频缩略图,为了避免用户上传的缩略图与视频内容不符,经理要求直接从上传的视频中截图视频的某一帧作为缩略图,并给我推荐了FFMPEG。FFMPEG 功能很强大,做视频必备的软件。

FFMPEG下载地址:https://ffmpeg.org/download.html

1、VideoThumbTaker.java 获取视频指定播放时间的图片

package video;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

/**
* 2017-08-10
* @author szq
*
*/

public class GrabberVideoThumb
{
protected String ffmpegApp;

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

@SuppressWarnings("unused")
/****
* 获取指定时间内的图片
* @param videoFilename:视频路径
* @param thumbFilename:图片保存路径
* @param width:图片长
* @param height:图片宽
* @param hour:指定时
* @param min:指定分
* @param sec:指定秒
* @throws IOException
* @throws InterruptedException
*/
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();

if(br != null)
br.close();
if(isr != null)
isr.close();
if(stderr != null)
stderr.close();
}

public static void main(String[] args)
{
GrabberVideoThumb videoThumbTaker = new GrabberVideoThumb("F:\\ffmpeg\\bin\\ffmpeg.exe");
try
{
videoThumbTaker.getThumb("f:/02-MFS介绍及特性说明_rec.mp4", "F:\\test.png", 800, 600, 0, 0, 9);
System.out.println("over");
} catch (Exception e)
{
e.printStackTrace();
}
}
}

2、GrabberVideoFirstThumb.java 获取第一帧图片

import java.io.IOException;

/***
*
* 得到第一秒(也是第一帧)图片
*/
public class GrabberVideoFirstThumb extends GrabberVideoThumb
{
public VideoFirstThumbTaker(String ffmpegApp)
{
super(ffmpegApp);
}

public void getThumb(String videoFilename, String thumbFilename, int width,
int height) throws IOException, InterruptedException
{
super.getThumb(videoFilename, thumbFilename, width, height, 0, 0, 1);
}
}

3、GrabberVideoLastThumb.java 获取最后一帧图片

/**
* 得到最后一秒(也是最后一帧)图片
*/

public class GrabberVideoLastThumb extends GrabberVideoThumb
{
public GrabberVideoLastThumb(String ffmpegApp)
{
super(ffmpegApp);
}

public void getThumb(String videoFilename, String thumbFilename, int width,
int height) throws IOException, InterruptedException
{
VideoInfo videoInfo = new VideoInfo(ffmpegApp);
videoInfo.getInfo(videoFilename);
super.getThumb(videoFilename, thumbFilename, width, height,
videoInfo.getHours(), videoInfo.getMinutes(),
videoInfo.getSeconds() - 0.2f);
}
}

参考:

http://www.codereye.com/2010/05/get-first-and-last-thumb-of-video-using.html

以上是关于如何把上传的视频用该视频的第一帧的缩略图显示的主要内容,如果未能解决你的问题,请参考以下文章

ios获取本地视频第一帧,缩略图

通过 ffmpeg 获取视频第一帧(指定时间)图片

如何从 iOS 中的 ALAsset 获取视频的缩略图?

C#获取本地视频的缩略图的方法都有哪些?

如何显示 youtube 视频缩略图

从 YouTube API 中获得 YouTube 视频的缩略图