FFmpeg是一个很好用的开源的视频处理工具,网上也有一些java调用FFmpeg的方法,然而这些文章大部分都有一个共同的特点,就是用java去调用FFmpeg去做视频处理,几乎没有去做录制视频和音频的,这些文章都巧妙的回避了一个问题,就是:如何能在java中正确关闭FFmpeg线程

要在java中调用FFmpeg,无非是用java启动一个cmd命令的线程,俗话说请神容易送神难,这个cmd线程打开是很容易的,然而关闭却很难,这个线程如果不能正确关闭,就会使FFmpeg之前录制的视频全部无法正确保存,或者视频格式出现异常,无法播放。本人查阅了大量的国内论坛,没找到解决方案,也查看了很多国外的提问的帖子,至今也未能解决,本人经过反反复复尝试,研究,终于解决此问题,现分享给大家

整个实现过程如下:

package test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;public class TestConsole {private Runtime runtime;private Process pro;private void exec(String cmd) {try { System.out.println("系统开始执行命令:\n" + cmd);runtime = Runtime.getRuntime();pro = runtime.exec(cmd);InputStream stream = pro.getErrorStream();output(stream);pro.waitFor();} catch (Exception e) {e.printStackTrace();} }public void stop() throws IOException {OutputStream ostream = pro.getOutputStream();  ostream.write("q\r\n".getBytes());  ostream.flush();ostream.close();}public void output(InputStream stream) {InputStreamReader isr = null;BufferedReader br = null;try {isr = new InputStreamReader(stream, "gbk");br = new BufferedReader(isr);String str;// 通过readLine()方法按行读取字符串while ((str = br.readLine()) != null) {System.out.println(str);}} catch (IOException e) {e.printStackTrace();} finally {close(br, isr, stream);}}public void close(AutoCloseable ... acs) {for(AutoCloseable ac : acs) {try {ac.close();} catch (Exception e) { e.printStackTrace();}}}public static void main(String[] args) throws Exception {TestConsole console = new TestConsole();String cmd = "ffmpeg.exe -f gdigrab -offset_x 42 -offset_y 325 -video_size 1196x900 -i desktop -f dshow -i audio=\"virtual-audio-capturer\" -vcodec libx264 -pix_fmt yuv420p  C:\\Users\\lv-wang\\Desktop\\测试录屏\\ii.mp4";new Thread(()->console.exec(cmd)).start();Thread.sleep(1000*10);console.stop();System.out.println("已经停止");Thread.sleep(1000*5);}
}

Java调用FFmpeg实现视频录制相关推荐

  1. mysql+视频文件转成流_详解java调用ffmpeg转换视频格式为flv

    详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在Linux下运行的,如果在windows下rmvb转换成avi会出现问题,想成功需要下载下个drv43260.dll东西放到C:W ...

  2. Java调用ffmpeg进行视频.H264抽帧,并保存为图片

    Java调用ffmpeg进行视频.H264抽帧,并保存为图片 1. 需求 2. 解决 3. 源码 参考 1. 需求 对视频 D:\data\01-test.H264进行抽帧并保存为图片,图片命名为1. ...

  3. Java 调用ffmpeg 实现视频编辑

    1. 前言 FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视 ...

  4. Java调用ffmpeg实现视频转gif、webp动图

    安装ffmpeg linux环境 yum install epel-release -y #查看centos版本 cat /etc/redhat-release #由于CentOS没有官方FFmpeg ...

  5. java flv转mp3_Java调用ffmpeg转换视频格式为flv的示例详解

    这篇文章主要介绍了 详解java调用ffmpeg转换视频格式为flv的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下 详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在L ...

  6. java调用ffmepg_java调用ffmpeg施行视频转换

    java调用ffmpeg执行视频转换 用java小例题说明更直观:(可以直接编译运行) 环境我在windows平台下测试的... 需要在e:\下有ffmpeg.exe;mencoder.exe;drv ...

  7. JAVA调用FFmpeg实现音视频转码加水印功能

    目录 目录 写在前面 MAVEN引用 获取音视频基本信息 音频转码成Mp3格式 视频转码成Mp4格式 视频转码成Mp4并添加文字水印 视频转码成Mp4并添加图片水印 测试代码 写在前面 如今各大云厂商 ...

  8. java命令截图,GitHub - xuege-cn/fmj: FMJ (FFMpeg for Java)。通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息、截图等等)。...

    项目介绍 FMJ (FFMpeg for Java) 通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息.截图等等). FFMpeg安装 建议使用 ffmpeg-2.6.1 版本 Li ...

  9. java调用ffmpeg把rtsp视频流保存为MP4文件

    前言:最近需要把rtsp的视频流保存为MP4文件(就是录制直播流).刚开始用的javacv的FFmpegFrameGrabber和FFmpegFrameRecorder,但是声音流和视频流无法调整,声 ...

最新文章

  1. 《Python和Pygame游戏开发指南》——1.12 图书中的文本折行
  2. JavaScript学习总结(十三)——极简主义法编写JavaScript类
  3. boost::test模块测试参数化测试
  4. kibana数据可视化
  5. strcpy与strcat函数原型
  6. 北京开源人linux运维实战
  7. 常识分析 | 为什么 CPU 访问硬盘很慢
  8. 集合Collection总览
  9. 只用两行代码,我让Transformer推理加速了50倍
  10. MATLAB R2016a 简单介绍
  11. IBM SPSS Modeler 【3】 神经网络的生成
  12. 国内外有名的计算机视觉团队汇总
  13. 51单片机LED 8*8点阵屏显示图形
  14. BLE Mesh网络协议综述
  15. 如何让网站在浏览器网址前面显示小图标?ico图标怎么放?
  16. c语言浮点数和0比较大小,C-浮点数为什么不能和0比较?
  17. Excel做数据海报
  18. c++数组指针和指针数组详解
  19. 无人机设计中的下一个进化步骤
  20. 矢量量化识别孤立字的matlab编码_新zwpython 完胜 老matlab 篇二

热门文章

  1. ros 中的环境变量 ROS_MASTER_URI 和 ROS_HOSTNAME 两三事
  2. 干货 | 记一次跨域配置引发的思考
  3. 传播智客工作流视频,OA工作流视频
  4. 基于JAVA人才库构建研究计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  5. Centos7上安装配置Hue
  6. python使用代理访问服务器
  7. radiobutton去除圆圈_将radiobutton 左边的圆圈设置自己的样式 | 学步园
  8. 2d平移、缩放、旋转、倾斜、多属性值
  9. Fortran语言——矩阵乘法排列顺序问题
  10. “小镇做题家”:难免挣扎,不必自卑!