java+ffmpeg使用记录

2 篇文章 0 订阅

java+ffmpeg使用记录

一、前言

  • ffmpeg

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

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

  • 开发环境
  1. 操作系统:Windows 7 Ultimate
  2. Java 环境:JDK 1.8
  • 参考:

二、正文

  • 下载并解压 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垂直翻转播放视频
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

趴着喝可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值