在之前的教程中,我对视频处理Xuggler进行了简短介绍 。 在这一部分中,我们将看到Xuggler和FFmpeg提供的一些更令人兴奋的功能,例如视频转码和媒体修改。 不要忘记Xuggler是一个Java库,可用于实时解压缩,处理和压缩录制的视频或实时视频。
Xuggler提供了两种不同的编程API,可用于同一目的。 首先,我们有MediaTool API :
MediaTool是一个简单的应用程序编程接口(API),用于对Java中的视频进行解码,编码和修改。 MediaTool隐藏了许多容器,编解码器和其他内容的细节,因此您可以专注于媒体而不是工具。 就是说,MediaTool仍然提供对基础Xuggler对象的访问,因此,如果需要,您可以进行精细的控制。
还有Xuggler Advanced API ,它使您可以深入研究视频操作的细节,但又增加了一层复杂性。
首先,我们将使用MediaTool API ,在随后的教程中,我们还将处理Advanced API。
让我们开始将媒体从一种格式转码为另一种格式。 代码转换是一种编码到另一种编码的直接数模转换。 通常在目标设备不支持格式或存储容量有限(要求减小文件大小)或将不兼容或过时的数据转换为更好支持的格式或现代格式的情况下执行此操作。 转码通常是一个有损过程 ,其中“有损”压缩是一种数据编码方法,为了达到其目标,它会丢弃(丢失)某些数据,结果是,对数据进行解压缩会产生与原始数据不同的内容,尽管足够相似,以某种方式有用。
让我们看一些用于转码的高级代码,稍后我将详细解释。
package com.javacodegeeks.xuggler;
import com.xuggle.mediatool.IMediaReader;
import com.xuggle.mediatool.IMediaViewer;
import com.xuggle.mediatool.IMediaWriter;
import com.xuggle.mediatool.ToolFactory;
public class TranscodingExample {
private static final String inputFilename = "c:/myvideo.mp4";
private static final String outputFilename = "c:/myvideo.flv";
public static void main(String[] args) {
// create a media reader
IMediaReader mediaReader =
ToolFactory.makeReader(inputFilename);
// create a media writer
IMediaWriter mediaWriter =
ToolFactory.makeWriter(outputFilename, mediaReader);
// add a writer to the reader, to create the output file
mediaReader.addListener(mediaWriter);
// create a media viewer with stats enabled
IMediaViewer mediaViewer = ToolFactory.makeViewer(true);
// add a viewer to the reader, to see the decoded media
mediaReader.addListener(mediaViewer);
// read and decode packets from the source file and
// and dispatch decoded audio and video to the writer
while (mediaReader.readPacket() == null) ;
}
}
只需几行代码,我们就可以将MPEG-4输入文件转换为