一.ffmpeg

1.简介

FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。

FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。

多媒体视频处理工具FFmpeg有非常强大的功能,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

ffmpeg在windows下的视频采集

在windows下关于ffmpeg视频采集的资料非常少,但是ffmpeg还是支持windows下视频采集的。ffmpeg支持windows下video for windows(VFW)设备的视频采集,不过VFW设备已经过时,正在被WDM的视频设备所取代,但是ffmpeg还没有支持WDM的计划,不过好像有将WDM转为VFW的工具,因此ffmpeg还是可以在windows下进行视频采集的。

视频格式转换功能

ffmpeg视频转换功能。视频格式转换,比如可以将多种视频格式转换为flv格式,可不是视频信号转换 。

ffmpeg可以轻易地实现多种视频格式之间的相互转换(wma,rm,avi,mod等),例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。

视频截图功能

对于选定的视频,截取指定时间的缩略图。视频抓图,获取静态图和动态图,不提倡抓gif文件;因为抓出的gif文件大而播放不流畅

给视频加水印功能

使用ffmpeg 视频添加水印(logo)。

2.mac下安装ffmpeg

(2)先安装Homebrew

终端下直接输入以下命令即可:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

(2)安装ffmpeg

终端下直接输入以下命令即可:

brew install ffmpeg

安装后输入ffmpeg命令

3.ffmpeg常用命令

将视频 MP4 转化为 GIF
ffmpeg -i small.mp4 small.gif
转化视频中的一部分为 GIF
ffmpeg -t 3 -ss 00:00:02 -i small.webm small-clip.gif
从视频中第二秒开始,截取时长为3秒的片段转化为 gif
​
转化高质量 GIF
默认转化是中等质量模式,若要转化出高质量的 gif,可以修改比特率
​
视频属性调整
ffmpeg -i small.mp4 -b 2048k small.gif
​
缩放视频尺寸
ffmpeg -i big.mov -vf scale=360:-1  small.mov
注意 sacle 值必须是偶数,这里的 -1 表示保持长宽比,根据宽度值自适应高度。
​
如果要求压缩出来的视频尺寸长宽都保持为偶数,可以使用 -2
​
加倍速播放视频
ffmpeg -i input.mov -filter:v "setpts=0.5*PTS" output.mov
​
定义帧率 16fps
ffmpeg -i input.mov -r 16 -filter:v "setpts=0.125*PTS" -an output.mov
​
慢倍速播放视频
ffmpeg -i input.mov -filter:v "setpts=2.0*PTS" output.mov
​
静音视频(移除视频中的音频)
ffmpeg -i input.mov -an mute-output.mov
-an 就是禁止音频输出
​
将 GIF 转化为 MP4
ffmpeg -f gif -i animation.gif animation.mp4
​
也可以将 gif 转为其他视频格式
ffmpeg -f gif -i animation.gif animation.mpeg
ffmpeg -f gif -i animation.gif animation.webm
​
将视频中的音频换成另一个音频
ffmpeg -i odd.mp4 -i bgm.mp3 -t 7 -y new.mp4
将odd.mp4中的音频换成bgm.mp3,视频长度为7秒,保存为一个新文件new.mp4
​
获取 GIF 的第一帧图片
使用 ImageMagick 可以方便第提取 gif 图片的第 N 帧图像。
安装 ImageMagick
brew install imagemagick
提取第一帧
convert 'animation.gif[0]' animation-first-frame.gif
通过 [0] 就可以提取出 gif 的第一帧图像。

二.java操作ffmpeg处理视频

由于使用ffmpeg需要在cmd或者终端中执行shell命令,java的JDK里面提供了一个类ProcessBuilder,来帮助我们去执行指定的shell脚本,达到对应的目的。

1.ProcessBuilder介绍

通过Java执行系统命令,与cmd中或者终端上一样执行shell命令,最典型的用法就是使用Runtime.getRuntime().exec(command)或者new ProcessBuilder(cmdArray).start()。从JDK1.5开始,官方提供并推荐使用ProcessBuilder类进行shell命令操作。

使用ProcessBuilder很简单,只需要通过Arrays.asList()构建一个List的参数集合,然后在ProcessBuilder的构造函数传入参数,即可 start()方法执行

2.java操作ffmpeg代码示例

public class MergeVideoMp3 {
​private String ffmpegEXE;
​public MergeVideoMp3(String ffmpegEXE) {super();this.ffmpegEXE = ffmpegEXE;}
​/*** 将视频中的音频替换为指定音频** @param videoInputPath* @param mp3InputPath* @param seconds* @param videoOutputPath* @throws Exception*/public void convertor(String videoInputPath, String mp3InputPath,double seconds, String videoOutputPath) throws Exception {
//      ffmpeg.exe -i odd.mp4 -i bgm.mp3 -t 7 -y new.mp4List<String> command = new ArrayList<>();command.add(ffmpegEXE);
​command.add("-i");command.add(videoInputPath);
​command.add("-i");command.add(mp3InputPath);
​command.add("-t");command.add(String.valueOf(seconds));
​command.add("-y");command.add(videoOutputPath);
​InputStream errorStream = null;InputStreamReader inputStreamReader = null;BufferedReader br = null;try {ProcessBuilder builder = new ProcessBuilder(command);Process process = builder.start();
​errorStream = process.getErrorStream();inputStreamReader = new InputStreamReader(errorStream);br = new BufferedReader(inputStreamReader);
​while (br.readLine() != null) {}} finally {if (br != null) {br.close();}if (inputStreamReader != null) {inputStreamReader.close();}if (errorStream != null) {errorStream.close();}}}
​public static void main(String[] args) {//参数为ffmpeg启动命令的路径。在bin目录中MergeVideoMp3 ffmpeg = new MergeVideoMp3("/usr/local/Cellar/ffmpeg/4.1.4/bin/ffmpeg");try {ffmpeg.convertor("/Users/apple/workspace//video-file/180425CFA4RB6T0H/video/test.mp4", "/Users/apple/workspace//video-file/bgm/11796.mp3", 7.1, "/Users/apple/workspace//video-file/180425CFA4RB6T0H/video/test222.mp4");} catch (Exception e) {e.printStackTrace();}}
​
}

ffmpeg入门及java操作ffmpeg对视频进行处理相关推荐

  1. Java操作ffmpeg--截取视频

    Java操作ffmpeg截取视频指定时间的内容 src:原文件路径   dest:生成文件路径   start:开始时间(格式:xx:xx:xx)   time:截取多少时间(格式:xx:xx:xx, ...

  2. kafka入门(4)-java操作kafka

    kafka入门(4)-java操作kafka 准备工作 创建maven工程 导入Maven Kafka POM依赖 <repositories><!-- 代码库 -->< ...

  3. Java操作ffmpeg为视频添加音乐

    最近学习仿抖音微信小程序遇到一个坑,视频中使用以下语句为视频添加背景音乐 ffmpeg.exe -i input.mp4 -i 音乐.mp3 -t 7 -y 新视频.mp4 发现并不管用. 自己将其改 ...

  4. FFmpeg入门详解之117:视频监控的架构和流程

    几张架构图带您快速了解视频监控 图一 图二 图三 图四 视频监控系统的简介 视频监控 视频监控是安全防范系统的重要组成部分,英文Cameras and Surveillance.传统的监控系统包括前端 ...

  5. java操作ffmpeg+ffmpeg使用

    ffmpeg 官网: http://ffmpeg.org/ 文档: http://ffmpeg.org/ 基本使用 官网下载 一.视频转换 ffmpeg.exe -i 1.avi 1.mp4 转mp4 ...

  6. redis入门及java操作

    redis 命令可以去菜鸟教程http://www.runoob.com/redis/redis-tutorial.html 或者以下地址去学习http://www.cnblogs.com/huang ...

  7. java操作ffmpeg为视频添加背景音乐

    最近学习仿抖音微信小程序遇到一个坑,视频中使用以下语句为视频添加背景音乐 ffmpeg.exe -i input.mp4 -i 音乐.mp3 -t 7 -y 新视频.mp4 ,然而我怎么尝试都不行,上 ...

  8. ffmpeg入门小结(二)——音视频同步

    1.H264格式简介(视频解码同步相关) ---------------------- 前言 ----------------------- H264是新一代的编码标准,以高压缩高质量和支持多种网络的 ...

  9. FFmpeg入门详解之20:视频编码原理简介

    视频为何需要压缩? 原因:未经压缩的数字视频的数据量巨大 ● 存储困难 ○ 一G只能存储几秒钟的未压缩数字视频. ● 传输困难 ○ 1兆的带宽传输一秒的数字电视视频需要大约4分钟. 主要压缩了什么东西 ...

最新文章

  1. 懂语言者得天下:NLP凭什么被称为人工智能的掌上明珠?
  2. 记录一下集成修改触发模式的过程
  3. .9-Vue源码之AST(5)
  4. 购物车模块如何进行测试?
  5. 4 文件操作 支持图片 视频 mp3 文本等
  6. LeetCode 136. 只出现一次的数字(异或^)
  7. SqlServer分组取一瓢和月初月末
  8. 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来 并具有动态排序 动态生成查询 自动分页功能
  9. JZOJ 1386. 排序
  10. html5复选框控制按钮状态,HTML5如何添加原生radio按钮和checkbox复选框转换为非常好看的滑动开关按钮的插件...
  11. 想转行做web前端工程师,必学这6大技能
  12. TED 你有拖延症吗?
  13. “备胎”海思的蛰伏与挑战
  14. Springboot + Quartz 实现分布式定时任务集群
  15. 《了不起的盖茨比》极简版:进化神驱动的二舅和二伯
  16. Woed渐变背景怎么设置?word渐变填充在哪里?
  17. 对随机变量值域的思考
  18. 网页打开DWG图纸,浏览器直接打开CAD图纸,MxDraw云图平台(H5在线cad) 2022.05.19更新
  19. ios 主题切换 思路_一个轻量级的iOS皮肤切换方案(内附Demo)
  20. 【HAOI2008】【BZOJ1041】圆上的整点

热门文章

  1. 创新实训个人记录 : 个人工作总结
  2. Windows服务器版本简介
  3. MySQL—不相关子查询(单行子查询)
  4. python——类和对象之__str__方法的使用
  5. mk_trustonic.mk编译脚本
  6. 2021-07-03
  7. (70)内核重载 xp sp3 x86 单核
  8. 1151 LCA in a Binary Tree (30 分)【难度: 难 / 知识点: LCA 未完成】
  9. queue的常见用法详解
  10. Spring boot表单重复提交