Java 使用 FFmpeg 处理视频文件示例代码详解

目前在公司做一个小东西,里面用到了 FFmpeg 简单处理音视频,感觉功能特别强大,在做之前我写了一个小例子,现在记录一下分享给大家,希望大家遇到这个问题知道解决方案。

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。

首先说明,我是在 https://ffmpeg.zeranoe.com/builds/ 这个地方下载的软件,Windows 和 Mac 解压之后即可使用。具体代码如下:

package cn.bridgeli.demo;

import org.junit.Test;

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

/**
 * @author BridgeLi
 * @date 2020/2/29 15:40
 */
public class FfmpegTest {

 private static final String OS = System.getProperty("os.name").toLowerCase();
 private static final String FFMPEG_PATH = "/Users/bridgeli/ffmpeg-20200216-8578433-macos64-static/bin/ffmpeg";

 @Test
 public void testFfmpeg() {

 String inputWavFile = "/Users/bridgeli/inputWavFile.wav";
 String inputMp3File = "/Users/bridgeli/inputMp3File.mp3";
 String inputMp4File = "/Users/bridgeli/inputMp4File.mp4";
 String outMergeMp3File = "/Users/bridgeli/outMergeMp3File.mp3";
 String outMergeMp3AndMp4File = "/Users/bridgeli/outMergeMp3AndMp4File.mp4";
 String outConcatMp3File = "/Users/bridgeli/outConcatMp3File.mp3";

 // 拼接
 String command = null;
 if (OS.contains("mac") || OS.contains("linux")) {
 command = FFMPEG_PATH + " -i " + inputMp3File + " -i " + inputWavFile + " -filter_complex [0:0][1:0]concat=n=2:v=0:a=1[a] -map [a] " + outConcatMp3File;
 } else if (OS.contains("windows")) {
 command = FFMPEG_PATH + " -i " + inputMp3File + " -i " + inputWavFile + " -filter_complex \"[0:0][1:0]concat=n=2:v=0:a=1[a]\" -map \"[a]\" " + outConcatMp3File;
 }
 // 合并(视频和音频)
// String command = FFMPEG_PATH + " -i " + inputMp4File + " -i " + outConcatMp3File + " -c:v copy -c:a aac -strict experimental " + outMergeMp3AndMp4File;
 // 合并
// String command = FFMPEG_PATH + " -i " + inputMp3File + " -i " + inputWavFile + " -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 " + outMergeMp3File;
 System.out.println(command);

 Process process = null;
 try {
 process = Runtime.getRuntime().exec(command);
 } catch (IOException e) {
 e.printStackTrace();
 }

 if (null == process) {
 return;
 }

 try {
 process.waitFor();
 } catch (InterruptedException e) {
 e.printStackTrace();
 }

 try (InputStream errorStream = process.getErrorStream();
 InputStreamReader inputStreamReader = new InputStreamReader(errorStream);
 BufferedReader br = new BufferedReader(inputStreamReader)) {

 String line = null;
 StringBuffer context = new StringBuffer();
 while ((line = br.readLine()) != null) {
 context.append(line);
 }

 System.out.println("error message: " + context);
 } catch (IOException e) {
 e.printStackTrace();
 }

 process.destroy();
 }
}

在我的认知中,完成任务是第一位的,所以按照这个简单处理一下音视频是没有问题的,具体更强大的语法,大家可以自己查询相关文档,也可以参考 https://www.jb51.net/article/181662.htm这篇文中,其中我个人也在学习中。下面说两个在使用的过程中遇到的问题。

1. 我在测试的时候,DOS 和 bash 都没有问题,但是 Java 一调用就出错,仔细看报错信息都是什么参数无效之类的,后面参考https://www.jb51.net/article/181668.htm这篇文章,原来都是一些单双引号和空格什么之类的导致的,大家在用的时候可以注意下,也多看看报错信息。

2. 因为我是从上面的文中提到的网址中直接下载解压使用的,但是在部署测试环境的时候是让运维帮忙部署的,因为上面也没有运维直接使用的可执行文件,所以个人猜测运维是直接源码安装的,所以在使用的过程过中遇到了一个问题,没有安装 mp3 编码库导致的,具体参考 https://www.jb51.net/article/181671.htm 这篇文章解决,所以大家在安装好环境之后可以先自己试着直接执行一下命令看看是否成功。

总结

到此这篇关于Java 使用 FFmpeg 处理视频文件示例代码详解的文章就介绍到这了,更多相关java FFmpeg 处理视频文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2020-02-28

java调用ffmpeg实现视频转换的方法

本文实例讲述了java调用ffmpeg实现视频转换的方法.分享给大家供大家参考.具体分析如下: 这里环境我是在windows平台下测试的... 需要在e:\下有ffmpeg.exe;mencoder.exe;drv43260.dll;pncrt.dll共4个文件.   还要在e:\input下放各种文件名为a的以下各种视频文件:还要e:\output:java程序执行后能得到一个a.flv的已转换的文件. ffmpeg.exe能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov

Java通过调用FFMPEG获取视频时长

FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的. 由此看来FFmpeg很强大,很多主流的音频.视频处理软件都使用了FFmpeg. FFmpeg下载下来解压,cmd进入到FFmpeg.exe目录中,即可在命令行下进行各种操作,查看视频信息命令:f

Java使用FFmpeg处理视频文件的方法教程

前言 本文主要讲述如何使用Java + FFmpeg实现对视频文件的信息提取.码率压缩.分辨率转换等功能: 之前在网上浏览了一大圈Java使用FFmpeg处理音视频的文章,大多都讲的比较简单,楼主在实操过程中踩了很多坑也填了很多坑,希望这份详细的踩坑&填坑指南能帮助到大家: 1. 什么是FFmpeg 点我了解 2. 开发前准备 在使用Java调用FFmpeg处理音视频之前,需要先安装FFmpeg,安装方法分为两种: 引入封装了FFmpeg的开源框架 在系统中手动安装FFmpeg 2.1 引入封装

Javacv使用ffmpeg实现音视频同步播放

最近用javaCV的ffmpeg包的FFmpegFrameGrabber帧捕捉器对捕捉到的音频帧和视频帧做了同步的播放.采用的同步方法是视频向音频同步. 程序和源码 具体的思路如下: (1)首先介绍ffmpeg是如何捕捉视频文件的图像和声音的 FFmpegFrameGrabber fg = new FFmpegFrameGrabber("a video file path or a url); 得到帧捕捉器对象后,调用它的grab()方法就会返回捕捉到的Frame对象.这个Frame可以是视频帧

Java实现对视频进行截图的方法【附ffmpeg下载】

本文实例讲述了Java实现对视频进行截图的方法.分享给大家供大家参考,具体如下: 之前介绍过Java使用ffmpeg进行视频转换,这里演示一下ffmpeg进行视频截图的方法. 具体代码如下: import java.io.File; import java.util.List; //生成视频文件的首帧为图片 //windows下的版本 public class CreatePh { // public static final String FFMPEG_PATH = "E:/ffmpeg/ff

jQuery使用$.ajax进行异步刷新的方法(附demo下载)

本文实例讲述了jQuery使用$.ajax进行异步刷新的方法.分享给大家供大家参考,具体如下: 最近要用到jquery进行异步读取数据的功能,jquery提供了许多内置的异步读取函数,给大家演示下最常用的$.ajax用法 在客户端文本框输入一个内容,然后在服务器端返回时间 在DEMO中要用到ashx文件,用于获取服务器的信息 效果图片 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 客户端代码 <%@ Page Language="C#" Au

DEDECMS TAG伪静态 IIS_rewrite配置方法附rewrite下载

方法 1.因为没有像PHP自带的ReWrite模块,所以需要下载IIS Rewrite模块: http://www.jb51.net/softs/6192.html 2.将压缩包解压到任意目录,(如:C:\Rewrite).然后打开"控制面板"-"管理工具"-"IIS信息服务管理器"-"网站"-"您的站点 "-"属性".在"ISAPI筛选器"项点击 "添加&

java使用ffmpeg实现上传视频的转码提取视频的截图等功能(代码操作)

ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用.ffmpeg能解析的格式和不能解析的格式都一一给大家说明了,具体内容详情跟随一起看看吧, 1.能支持的格式 ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 2.不能支持的格式 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(menco

js+HTML5实现视频截图的方法

本文实例讲述了js+HTML5实现视频截图的方法.分享给大家供大家参考.具体如下: 1. HTML部分: <video id="video" controls="controls"> <source src=".mp4" /> </video> <button id="capture">Capture</button> <div id="output&

C#实现通过ffmpeg从flv视频文件中截图的方法

本文实例讲述了C#实现通过ffmpeg从flv视频文件中截图的方法.分享给大家供大家参考.具体分析如下: 需要先下载ffmpeg,这是开源的,代码如下所示: 复制代码 代码如下: using System; using System.Configuration; public class PublicMethod:System.Web.UI.Page {     public PublicMethod()     {     }     //文件路径     public static stri

PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法

本文实例讲述了PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法.分享给大家供大家参考,具体如下: 这里把ffmpeg 和  生成缩略图整合了一下: include("ImageResize.class.php") //转视频 $cmd="ffmpeg.exe -i starwar.avi -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 1.flv"; exec($cmd); //视频截图 $cmd="ffmpeg

java实现pdf文件截图的方法【附PDFRenderer.jar下载】

本文实例讲述了java实现pdf文件截图的方法.分享给大家供大家参考,具体如下: 最近做的一个网站中,有个需求是上传pdf文件,显示pdf的封页,点击封页之后进行在线阅读,这里使用的是PDFRender对pdf进行截图. public static boolean createScreenShoot(String source, String target) { File file = new File(source); if (!file.exists()) { System.err.prin

Java上传视频实例代码

页面: 上传文件时的关键词:enctype="multipart/form-data" <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://&qu

JS实现预加载视频音频/视频获取截图(返回canvas截图)

#load-media.js /** * Create by Capricorncd 2017 */ // 同域资源实现视频截图,可上传的图片数据格式 // 非同域资源实现canvas截图预览 // 提示码 const CODES = { 0: 'success', 1: 'The url is not valid', 2: 'onerror' } /** * constructor * @param opts.url 音频|视频URL * @param opts.type 'audio|vid