Java生成视频缩略图

对于上传视频生成缩略图使用的是ffmpeg进行生成的。

自己在网上找了如何进行编译ffmpeg的方法

但是感觉太复杂了

就到csdn上找到了编译好的ffmpeg文件

体会到ffmpeg非常强大,大部分流行的视频格式的都能生成缩略图

现在开始

首先下载ffmpeg解压

方法一:

建立一个bat文件

start

E:/ffmpeg/bin/ffmpeg.exe -i %1 -ss 20 -vframes 1 -r 1 -ac 1 -ab 2 -s 160*120 -f image2 %2

exit

说明下使用红色吧标记的意义

E:/ffmpeg/bin/ffmpeg.exe ffmpeg的路径

%1 %2 和C语言有点相似是为传参数保留位置

20 要截取多少秒后的图片

打开MyEclipse,建立一个工程 ,以及一个java文件

package test;

import java.io.IOException;

public class Ffmpeg {
public static void main(String[] args) {
// 视频文件
String videoRealPath = "F://ffmpeg//Wildlife.wmv";
// 截图的路径(输出路径)
String imageRealPath = "F://ffmpeg//a.jpg";
String basePath = "F://ffmpeg";
try {
// 调用批处理文件
Runtime.getRuntime().exec(
"cmd /c start " + basePath + "//ffmpeg.bat " + basePath + " " + videoRealPath + " "
+ imageRealPath);
} catch (IOException e) {
e.printStackTrace();
}
}

}

方法二:

不需建立bat文件

/**
* 将视频转为缩略图 成功返回true,失败返回false
* @param exePath 可执行程序路径
* @param videoPath 视频路径
* @param imagepath 转换后图片路径
* @return
*/
public static boolean videoToImg(String exePath,String videoPath,String imagepath) {
File file = new File(videoPath);
if (!file.exists()) {
System.err.println("路径[" + videoPath + "]对应的视频文件不存在!");
return false;
}
List<String> commands = new java.util.ArrayList<String>();
commands.add(exePath);
commands.add("-i");
commands.add(videoPath);
commands.add("-ss");
// 要截取多少秒后的图片(在此截取1秒后的图片)
commands.add("1");
commands.add("-vframes");
commands.add("1");
commands.add("-r");
commands.add("1");
commands.add("-ac");
commands.add("1");
commands.add("-ab");
commands.add("2");
commands.add("-s");
commands.add("320*240");
commands.add("-f");
commands.add("image2");
commands.add(imagepath);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commands);
builder.start();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

 public static void main(String[] args)throws Exception{
        //1.获取当前工程目录,获取ffmpeg.exe
        File directory = new File(".");
        String root = directory.getCanonicalPath();
        String ffmpegPath = root + "\\ffmpeg\\ffmpeg.exe";
         
        //2.看不懂的童鞋们去读幼儿园吧(执行了后,刷新一下工程,注意观察你的工程目录中的image文件夹里,和控制台打印内容,成功了吧!)
        String videoPath=root + "\\video\\demo.mp4";
        String imagePath=root + "\\image\\ceshi.jpg";
         
        System.out.println("执行结果"+getVideoImage(ffmpegPath,videoPath,imagePath));
         
    }
/**
     * 获得视频缩略图,获取成功返回true,获取失败返回false
     * @param ffmpegPath  是ffmpeg.exe存放的路径
     * @param path   是视频文件的存放路径
     * @param outImagePath 输出缩略图的保存路径
     * @return
     */
    public static boolean getVideoImage(String ffmpegPath,String path,String outImagePath) {
        File file = new File(path);
        if (!file.exists()) {//判断视频文件是否存在
            System.err.println("路径[" + path + "]对应的视频文件不存在!");
            return false;
        }
        //设置参数
        List<string> commands = new java.util.ArrayList<string>();
        commands.add(ffmpegPath);//这里设置ffmpeg.exe存放的路径
        commands.add("-i");
        commands.add(path);//这里是设置要截取缩略图的视频的路径
        commands.add("-y");
        commands.add("-f");
        commands.add("image2");
        commands.add("-ss");
        commands.add("2");//这里设置的是要截取视频开始播放多少秒后的图,可以自己设置时间
        commands.add("-t");
        commands.add("0.001");
        commands.add("-s");
        commands.add("320x240");//这里设置输出图片的大小
        commands.add(outImagePath);//这里设置输出的截图的保存路径
     
        try {
            //截取缩略图并保存 
            ProcessBuilder builder = new ProcessBuilder();
            builder.command(commands);
            builder.start();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

Java将视频转为缩略图--ffmpeg的更多相关文章

  1. Java截取视频文件缩略图

    /** * 截取视频第0帧的图片 */public static void videoImage(String filePath, String fileName,int widthdist, int ...

  2. java 实现视频转换通用工具类:视频截图-Ffmpeg(四)

    java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) java 实现视频转换通用工具类:视频相互转换-Ffmpeg ...

  3. java 实现视频转换通用工具类:视频相互转换-Ffmpeg(三)

    java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) 这节主要是ffmpeg的相关方法封装,在实际调用中主要使用f ...

  4. C# ffmpeg工具将视频转为SWF格式

    1.下载ffmpeg工具 using System; using System.Collections; using System.Configuration; using System.Data; ...

  5. Java实现视频网站的视频上传、视频转码、及视频播放功能(ffmpeg)

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  6. Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  7. java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二)

    1.自动判断格式并调用相应的转换工具,默认方法 /** * 自动判断格式并调用相应的转换工具,默认方法 * @param srcVideoPath * @param tarVideoPath * @r ...

  8. java 实现视频转换通用工具类:获取视频元数据信息(一)

    java 做视频转换主要用到开源的ffmpeg或者mencoder,还要有MP4Box. 注:由于平时都没有时间写博客,所以思路我就不写了,有问题问我,不一定马上回复. 详细介绍: ffmpeg:ht ...

  9. Android 获取SDCard上图片和视频的缩略图

    获取图片缩略图和视频缩略图的方法: Java代码: import java.io.File; import android.app.Activity; import android.graphics. ...

随机推荐

  1. Android 8.0新特性-取消大部分静态注册广播

    今天楼主在写一个广播的demo,功能非常的简单,就是一个应用发送一个自定义的广播,同时在这个应用里面定义了一个广播接受者,并且在AndroidManifest文件中进行静态的注册.Demo看上去非常的 ...

  2. 赵雅智_service生命周期

    Android中的服务和windows中的服务是类似的东西,服务一般没实用户操作界面.它执行于系统中不easy被用户发觉,能够使用它开发如监控之类的程序. 服务的开发步骤 第一步:继承Service类 ...

  3. java设计模式之模板方法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744002 今天你还是像往常一样来上班,一如既往地开始了你的编程工作. 项目经理告 ...

  4. Android:singleTask + onActivityResult

    解决2个Activity互相跳转,并且栈中只保留每个Activity一个对象的存在. 在2个Activity中分别都要用到onActivityResult,所以就不能用launchMode=" ...

  5. iOS 扫雷游戏

    代码地址如下:http://www.demodashi.com/demo/11254.html 1.项目结构图 Viewcontroller:扫雷逻辑代码 LevelModel:扫雷难度选择代码 2. ...

  6. C++程序设计项目开发——银行自己主动提款机(二)

    函数的有关知识在后面章节会讲到,先提前了解下.在没有系统的学习完之前,咱们先来模仿着写一个样例,尝试这样的有效的学习方法.   尝试下这种学习方法. 显示功能选项 1.查询 2.取款 3.存款 4.转 ...

  7. 多线程-synchronized

    引言 synchronized是Java线程同步中的一个重要的概念,synchronized是独占锁(互斥锁),同时也是可重入锁(可重入锁一定程度上避免了死锁的问题,内部是关联一个计数器,加一次锁计数 ...

  8. Objective-C中的类型转换

    转自:http://blog.csdn.net/lonelyroamer/article/details/7711920 类型转换 表2-3列出了简单数据类型.示例和格式符. 表2-3 简单数据类型. ...

  9. Source Insight 项目简单使用说明

    SI(Source Insight) 是我一直写代码的好伙伴, 相信这强大的软件也是广大程序猿编写软件的利器. 正所谓" 工欲善其事, 必先利其器", 我们要学会利用这款软件. 先 ...

  10. HTTP Basic auth认证

    Basic 概述 Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用. 当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP ...