博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java+ffmpeg使用记录
阅读量:4298 次
发布时间:2019-05-27

本文共 3799 字,大约阅读时间需要 12 分钟。

文章目录

java+ffmpeg使用记录

一、前言

  • ffmpeg

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

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

  • 开发环境
  1. 操作系统:Windows 7 Ultimate
  2. Java 环境:JDK 1.8
  • 参考:
  • ffmpeg 官网:
  • ffmpeg 官方文档:
  • 前辈对 ffmpeg 命令的总结:
  • ProcessBuilder (java):

二、正文

  • 下载并解压 ffmpeg

资源下载:

  • 其中 bin 文件夹包含:
  1. ffmpeg.exe 用于转码

说明文档:

  1. ffplay.exe 用于播放

说明文档:

  1. ffprobe.exe 用于查看文件格式

说明文档:

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
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
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 垂直翻转播放视频

转载地址:http://dznws.baihongyu.com/

你可能感兴趣的文章
8、JavaWEB学习之基础篇—文件上传&下载
查看>>
reRender属性的使用
查看>>
href="javascript:void(0)"
查看>>
h:panelGrid、h:panelGroup标签学习
查看>>
f:facet标签 的用法
查看>>
<h:panelgroup>相当于span元素
查看>>
java中append()的方法
查看>>
必学高级SQL语句
查看>>
经典SQL语句大全
查看>>
Eclipse快捷键 10个最有用的快捷键
查看>>
log日志记录是什么
查看>>
<rich:modelPanel>标签的使用
查看>>
<h:commandLink>和<h:inputLink>的区别
查看>>
<a4j:keeyAlive>的英文介绍
查看>>
关于list对象的转化问题
查看>>
VOPO对象介绍
查看>>
suse创建的虚拟机,修改ip地址
查看>>
linux的挂载的问题,重启后就挂载就没有了
查看>>
docker原始镜像启动容器并创建Apache服务器实现反向代理
查看>>
docker容器秒死的解决办法
查看>>