Java实现视频,音频转码

需求:

  1. 把ape,ios,dsf,dff,ape,flac等音频格式转换为mp3,wav音频格式,因为大部分音乐播放器和html的< audio>标签都支持mp3和wav格式。

wav音乐格式是无损音乐,其他都是有损音乐格式或者无损音乐的压缩版。

  1. 把其他视频格式转换成HTML5能播放的视频格式,也可获取上传视频的时长,网页视频播放只支持一下三种:
格式解释
Ogg带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件
MPEG4带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件
WebM带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件

Jave介绍

JAVE(Java Audio Video Encoder),是一个包涵ffmpeg项目库。开发这可以运用它去实现音频(Audio)与视频(Video)文件的转码。
官方文档:http://www.sauronsoftware.it/projects/jave/manual.php

Jave中几个重要的类

1.Encoder类
	// 音频转换格式类
    Encoder encoder = new Encoder();

转码函数:

// 转码函数
public void encode(File source, 
					File target, 
					EncodingAttributes attributes,
 					EncoderProgressListener listener);

参数说明:

  1. source:需要转码的源文件
  2. target : 需转型成的目标文件
  3. attributes:包含编码所需数据的参数
  4. listener :可选参数,实现该监听器可调用该接口中的方法,下面有说明
2.EncodingAttributes类
	// 设置转码属性
    EncodingAttributes attrs = new EncodingAttributes();

方法列表:

// 设置转码音频,添加音频转码时所需音频属性
public void setAudioAttributes(AudioAttributes audioAttributes)
// 设置转码视频,添加视频转码时所需音频属性
public void setVideoAttributes(VideoAttributes videoAttributes)
//设置转码格式
public void setFormat(String format)
//设置转码偏移位置,自定义转码开始时间
public void setOffset(Float offset)
//设置转码持续时间,自定义转码持续时间
public void setDuration(Float duration)
3.AudioAttributes类:音频相关属性
	// 设置音频属性
    AudioAttributes audio = new AudioAttributes();

方法列表:

// 设置编码器
public void setCodec(String codec)
// 设置音频比特率
public void setBitRate(Integer bitRate)
// 设置音频节录率
public void setSamplingRate(Integer bitRate)
// 设置声音频道
public void setChannels(Integer channels)
// 设置音频音量
public void setVolume(Integer volume)
4.VideoAttributes 类:视频相关属性
	// 设置视频属性
	VideoAttributes video = new VideoAttributes();

方法列表:

// 设置编码器
public void setCodec(String codec)
// 设置标签(通常用多媒体播放器所选择的视频解码)
public void setTag(String tag)
// 设置视频比特率
public void setBitRate(Integer bitRate)
// 设置视频帧率
public void setFrameRate(Integer bitRate)
// 设置视频大小
public void setSize(VideoSize size)
5.MultimediaInfo类:媒体文件信息
    //创建媒体信息对象
    File source = new File("D:/test.mp4");
    MultimediaInfo info = encoder.getInfo(file);

方法列表:

// 获得文件格式
public String getFormat();
// 获得时间(ms)
public long getDuration();
// 获得音频对象
public AudioInfo getAudio();
// 获得视频对象
public VideoInfo getVideo();
6.EncoderProgressListener接口:监测转码操作
public interface EncoderProgressListener {
	//源文件信息
    void sourceInfo(MultimediaInfo var1);
	//增长千分率
    void progress(int var1);
	//转码信息提示
    void message(String var1);
}

实例

介绍:把除mp3和wav外的音乐格式转换成wav音乐格式

	/**
     * 转化音频格式
     * @param oldFormatPath : 原音乐路径
     * @param newFormatPath : 目标音乐路径
     * @return
     */
    public static boolean transforMusicFormat(String oldFormatPath, String newFormatPath) {
        File source = new File(oldFormatPath);
        File target = new File(newFormatPath);

        // 音频转换格式类
        Encoder encoder = new Encoder();

        // 设置音频属性
        AudioAttributes audio = new AudioAttributes();
        audio.setCodec(null);
        // 设置转码属性
        EncodingAttributes attrs = new EncodingAttributes();
        attrs.setFormat("wav");
        attrs.setAudioAttributes(audio);

        try {
            encoder.encode(source, target, attrs);
            System.out.println("传唤已完成...");
            deleteFile(oldFormatPath);
            return true;
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InputFormatException e) {
            e.printStackTrace();
        } catch (EncoderException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 删除原音频文件
     * @param filePath : 原文件路径
     * @return
     */
    public static boolean deleteFile(String filePath){
        File file = new File(filePath);
        // 路径为文件且不为空则进行删除
        if (file.isFile() && file.exists()) {
            // 文件删除
            file.delete();
            return true;
        }
        return false;
    }

    /**
     * 判断格式是否需要转换
     * @param musicName
     * @return
     */
    public static boolean checkMusicFormat(String musicName){
        if (musicName== null || "".equals(musicName)){
            return false;
        }
        String suffix = musicName.substring(musicName.lastIndexOf(".")+1);
        if ("mp3".equals(suffix) || "wav".equals(suffix)){
            return false;
        }
        return true;
    }

总结

转换音频格式步骤:

  1. 创建转换格式类Encoder
  2. 设置音频属性,通过AudioAttributes类完成
  3. 设置转码属性,通过EncodingAttributes类完成
  4. 调用Encoder类的encode方法转码

视频格式转换类似。

换下面这些音频视频,压缩包有包和源码,还有文档api. 整理资料不易,不喜欢可以自己百度 Audio decoders adpcm_4xm adpcm_adx adpcm_ct adpcm_ea adpcm_ea_r1 adpcm_ea_r2 adpcm_ea_r3 adpcm_ea_xas adpcm_ima_amv adpcm_ima_dk3 adpcm_ima_dk4 adpcm_ima_ea_eacs adpcm_ima_ea_sead adpcm_ima_qt adpcm_ima_smjpeg adpcm_ima_wav adpcm_ima_ws adpcm_ms adpcm_sbpro_2 adpcm_sbpro_3 adpcm_sbpro_4 adpcm_swf adpcm_thp adpcm_xa adpcm_yamaha alac ape atrac 3 cook dca dsicinaudio flac g726 imc interplay_dpcm liba52 libamr_nb libamr_wb libfaad libgsm libgsm_ms mace3 mace6 mp2 mp3 mp3adu mp3on4 mpc sv7 mpc sv8 mpeg4aac nellymoser pcm_alaw pcm_mulaw pcm_s16be pcm_s16le pcm_s16le_planar pcm_s24be pcm_s24daud pcm_s24le pcm_s32be pcm_s32le pcm_s8 pcm_u16be pcm_u16le pcm_u24be pcm_u24le pcm_u32be pcm_u32le pcm_u8 pcm_zork qdm2 real_144 real_288 roq_dpcm shorten smackaud sol_dpcm sonic truespeech tta vmdaudio vorbis wavpack wmav1 wmav2 ws_snd1 xan_dpcm Audio encoders ac3 adpcm_adx adpcm_ima_wav adpcm_ms adpcm_swf adpcm_yamaha flac g726 libamr_nb libamr_wb libfaac libgsm libgsm_ms libmp3lame libvorbis mp2 pcm_alaw pcm_mulaw pcm_s16be pcm_s16le pcm_s24be pcm_s24daud pcm_s24le pcm_s32be pcm_s32le pcm_s8 pcm_u16be pcm_u16le pcm_u24be pcm_u24le pcm_u32be pcm_u32le pcm_u8 pcm_zork roq_dpcm sonic sonicls vorbis wmav1 wmav2 Video decoders 4xm 8bps VMware video aasc amv asv1 asv2 avs bethsoftvid bmp c93 camstudio camtasia cavs cinepak cljr cyuv dnxhd dsicinvideo dvvideo dxa ffv1 ffvhuff flashsv flic flv fraps gif h261 h263 h263i h264 huffyuv idcinvideo indeo2 indeo3 interplayvideo jpegls kmvc loco mdec mjpeg mjpegb mmvideo mpeg1video mpeg2video mpeg4 mpegvideo msmpeg4 msmpeg4v1 msmpeg4v2 msrle msvideo1 mszh nuv pam pbm pgm pgmyuv png ppm ptx qdraw qpeg qtrle rawvideo roqvideo rpza rv10 rv20 sgi smackvid smc snow sp5x svq1 svq3 targa theora thp tiertexseqvideo tiff truemotion1 truemotion2 txd ultimotion vb vc1 vcr1 vmdvideo vp3 vp5 vp6 vp6a vp6f vqavideo wmv1 wmv2 wmv3 wnv1 xan_wc3 xl zlib zmbv Video encoders asv1 asv2 bmp dnxhd dvvideo ffv1 ffvhuff flashsv flv gif h261 h263 h263p huffyuv jpegls libtheora libx264 libxvid ljpeg mjpeg mpeg1video mpeg2video mpeg4 msmpeg4 msmpeg4v1 msmpeg4v2 pam pbm pgm pgmyuv png ppm qtrle rawvideo roqvideo rv10 rv20 sgi snow svq1 targa tiff wmv1 wmv2 zlib zmbv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值