天天看点

java+ffmpeg使用记录java+ffmpeg使用记录一、前言二、正文三、其它

文章目录

  • java+ffmpeg使用记录
  • 一、前言
  • 二、正文
    • 1.命令行运行
    • 2.java代码调用
  • 三、其它
    • 1.常用参数
    • 2.视频参数
    • 3.音频参数
    • 4.常用命令
      • 1)图片
      • 2)音视频

java+ffmpeg使用记录

一、前言

  • ffmpeg

完整的跨平台解决方案,用于记录,转换和流传输音频和视频。

FFmpeg是领先的多媒体框架,能够解码,编码, 转码,mux,demux,流,过滤和播放人类和机器创建的几乎所有内容。它支持最模糊的老旧格式,直至最新的格式。无论它们是由某些标准委员会,社区还是公司设计的。它还具有高度的可移植性:FFmpeg可以在各种构建环境,机器体系结构和配置下,跨Linux,Mac OS X,Microsoft Windows,BSD,Solaris等编译,运行并通过我们的测试基础架构 FATE。

  • 开发环境
  1. 操作系统:

    Windows 7 Ultimate

  2. Java 环境:

    JDK 1.8

  • 参考:
  • ffmpeg 官网:http://ffmpeg.org/
  • ffmpeg 官方文档:http://ffmpeg.org/documentation.html
  • 前辈对 ffmpeg 命令的总结:https://github.com/tonydeng/fmj/blob/master/ffmpeg.md
  • ProcessBuilder (java):https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html

二、正文

  • 下载并解压 ffmpeg
资源下载:http://ffmpeg.org/download.html
  • 其中 bin 文件夹包含:
  1. ffmpeg.exe

    用于转码
说明文档:http://ffmpeg.org/ffmpeg.html
  1. ffplay.exe

    用于播放
说明文档:http://ffmpeg.org/ffplay.html
  1. ffprobe.exe

    用于查看文件格式
说明文档:http://ffmpeg.org/ffprobe.html

1.命令行运行

  • 拷贝视频文件到

    bin

    文件夹,例如:input.mp4
  • windows 文件夹内

    Shift + 鼠标右击

    在此处打开命令窗口(W)

  • 运行命令:(格式转换)
> ffmpeg -i input.mp4 output.avi
           

2.java代码调用

  • 创建执行命令的任务工具类

    CommandTask.java

package com.demo.ffmpeg;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;

/**
 * 执行命令的任务工具
 * */
public class CommandTask {

    /**
     * 执行命令
     * @param command 命令
     * */
    public static void exeute(List<String> command) throws IOException {
        // 执行命令
        ProcessBuilder processBuilder = new ProcessBuilder(command);
        Process process = processBuilder.start(); // 开始执行
        InputStream errorStream = process.getErrorStream(); // 字节流
        InputStreamReader inputStreamReader = new InputStreamReader(errorStream); // 字节流和字符流的中介
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader); // 字符流
        String line = "";
        while ((line = bufferedReader.readLine()) != null){
            System.out.println(line); // 输出转换过程
        }
        // 关闭流
        if(bufferedReader != null){ bufferedReader.close(); }
        if(inputStreamReader != null){ inputStreamReader.close(); }
        if(errorStream != null){ errorStream.close(); }
    }
}
           
  • 创建测试类

    FFmpegTest.java

package com.demo.ffmpeg;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

public class FFmpegTest {

    public static void main(String[] args) {
        String ffmpegPath = "C:\\ffmpeg20200809\\bin\\ffmpeg.exe";
        String inputVideoPath = "C:\\ffmpeg20200809\\bin\\input.mp4";
        String outputVideoPath = "C:\\ffmpeg20200809\\bin\\output.avi";
        // 组装 格式转换 命令
        List<String> command = new LinkedList<>();
        command.add(ffmpegPath);
        command.add("-i");
        command.add(inputVideoPath);
        command.add(outputVideoPath);
        try {
            // 执行命令
            CommandTask.exeute(command);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
           

三、其它

1.常用参数

参数 说明
-i 设置输入流
-f 设置输出格式
-ss 开始时间;支持的时间格式:hh:mm:ss[.xxx]
-t 持续时间;支持的时间格式:hh:mm:ss[.xxx]
-title 设置标题
-author 设置作者
-copyright 设置版权
-comment 设置评论
-y 覆盖输出文件
-target 设置目标文件类型(vcd、svcd、dvd)

2.视频参数

参数 说明
-b 设置视频流量,默认 200 k/s
-s 设置画面的宽和高
-aspect 设置画面的比例
-vn 不处理视频
-vcodec 设置视频的编码器,默认使用与输入流相同的编解码器

3.音频参数

参数 说明
-ar 设置采样率
-ac 设置声音的通道数
-acodec 使用codec编解码
-an 不处理音频

4.常用命令

1)图片

命令 说明
ffmpeg -i input.mp4 -y -f image2 -t 0.001 -s 500*300 output.jpg 在视频 0.001毫秒处,截取一张 500*300 的 jpg 图片
ffmpeg -i input.mp4 -y -f mjpeg -ss 3 -t 0.001 -s 500*300 output.jpg 在视频 3.003 秒处,截取一张 500*300 的 jpg 图片
ffmpeg -i input.mp4 -f image2 -vf fps=1 output%d.png 每秒钟输出一帧 png 图片
ffmpeg -i input.mp4 output%d.png 每帧输出一张图片
ffmpeg -i input.mp4 -t 10 -pix_fmt rgb24 output.gif 将视频转换为 gif 图片
ffmpeg -i input.mp4 -vframes 60 -y -f gif output.gif 视频前 60 帧转换为一张 gif 图片
ffmpeg -f image2 -i output%d.png -r 25 video.mp4 将图片转换为视频

2)音视频

命令 说明
ffmpeg -i input.mp4 -i input.mp3 -vcodec copy -acodec copy output.mp4 将视频文件和音频文件合并
ffmpeg -i rtsp://host/address -vcodec copy output.avi 录制网络视频
ffmpeg -i input.mp4 -i logo.gif -filter_complex overlay="(main_w/2)-(overlay_w/2):(main_h/2)-overlay_h/2" output.mp4 添加居中水印;logo.gif为水印图片;overlay 是水印位置
ffplay -i input.mp4 -vf hflip 水平翻转播放视频
ffplay -i input.mp4 -vf vflip 垂直翻转播放视频