`

音视频编码转换-ffmpeg

    博客分类:
  • java
阅读更多
1.前言
    由于最近在做ios与android端需要做amr至mp3的转换,在网上搜了下资料,基本都是用ffmpeg做音视频类转换
2.ffmpeg下载安装
    2.1、下载ffmpeg。
    下载网址:http://www.ffmpeg.org/download.html
   
    2.2、解压缩
    tar -zxvf ffmpeg-2.0.1.tar.gz

   
   2.3、编辑profile文件:
          vi /etc/profile
        在文件末尾加上两句话:
        export FFMPEG_HOME=/usr/local/ffmpeg 
        export PATH=$FFMPEG_HOME/bin:$PATH


    2.4、配置安装路径之类的:
    ./configure --enable-shared --prefix=/usr/local/ffmpeg
    --enable-shared 参数据说是允许其编译产生动态库,在以后的编程中要用到这个几个动态库,我也没考证,就直接用了。
   如果出现异常,提示因为缺少yasm,需要添加参数,再执行以下命令:
    ./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg
    如果执行结果不对,可以根据提示信息,并查看帮助,解决问题
    ./configure --help


    2.5、编译安装
    make
    make install

    2.6、安装之后在/usr/local/ffmpeg会看到有三个目录
    bin 执行文件目录
    lib 静态,动态链接库目录
    include 编程用到的头文件

    2.7、为了防止执行程序找不到库文件,
    可以将/usr/local/ffmpeg/lib目录设置到LD_LIBRARY_PATH环境变量


    8、若出现error while loading shared libraries: libavdevice.so.52的错误
    修改/etc/ld.so.conf 在最后一行加上/usr/local/ffmpeg/lib
    ldconfig -v
    并修改 /usr/local/ffmpeg/lib目录下的文件权限为777


3.shell脚本命令转换
./ffmpeg -i source.amr dest.mp3


4.ffmpeg自带转换
/**
 * useFfmpegToMp3
 *
 * @param ffmpeg
 * @param source
 * @param target
 */
public static void useFfmpegToMp3(String ffmpeg, String source, String target){
    Runtime run = null;
    try {
        long start=System.currentTimeMillis();
        run = Runtime.getRuntime();
        //设置文件运行权限
        run.exec(new String[] { "/bin/chmod", "755", ffmpeg});
        String runCmd = ffmpeg + " -i " + source + " " +  target;
        //运行命令
        Process proc = run.exec(runCmd);
        proc.getOutputStream().flush();
        proc.getOutputStream().close();
        proc.getInputStream().close();
        LOGGER.info("Dest File Size:{}", new File(target).length());
        long end=System.currentTimeMillis();
        LOGGER.info("useFfmpegToMp3 Complete:{} -> {}, cost ms:{}", source, target, end-start);
    } catch (Exception e) {
        LOGGER.error("useJaveToMp3 Exception: ", e);
    } finally{
        //run调用lame解码器最后释放内存
        run.freeMemory();
    }
}


5.Jave转换

下载地址:http://www.sauronsoftware.it/projects/jave/download.php
 
/**
 * jave 转换mp3
 *
 * @param source
 * @param target
 */
public static void useJaveToMp3(String source, String target) {

    try {
        long start=System.currentTimeMillis();
        File sourceFile = new File(source);
        File targetFile = new File(target);
        AudioAttributes audio = new AudioAttributes();
        Encoder encoder = new Encoder();
        audio.setCodec("libmp3lame");
        EncodingAttributes attrs = new EncodingAttributes();
        attrs.setFormat("mp3");
        attrs.setAudioAttributes(audio);
        encoder.encode(sourceFile, targetFile, attrs);
        LOGGER.info("Dest File Size:{}", targetFile.length());
        long end=System.currentTimeMillis();
        LOGGER.info("useJaveToMp3 Complete:{} -> {}, cost ms:{}", source, target, end-start);
    }catch (Exceptio){
        LOGGER.error("useJaveToMp3 Exception: ", e);
    }

}

备注:
如果自带的FFmpeg转码报错,编译最新的ffmpeg,执行就可以了
官方示例:
 //From a generic AVI to a youtube-like FLV movie, with an embedded MP3 audio stream:

 File source = new File("source.avi");
 File target = new File("target.flv");
 AudioAttributes audio = new AudioAttributes();
 audio.setCodec("libmp3lame");
 audio.setBitRate(new Integer(64000));
 audio.setChannels(new Integer(1));
 audio.setSamplingRate(new Integer(22050));
 VideoAttributes video = new VideoAttributes();
 video.setCodec("flv");
 video.setBitRate(new Integer(160000));
 video.setFrameRate(new Integer(15));
 video.setSize(new VideoSize(400, 300));
 EncodingAttributes attrs = new EncodingAttributes();
 attrs.setFormat("flv");
 attrs.setAudioAttributes(audio);
 attrs.setVideoAttributes(video);
 Encoder encoder = new Encoder();
 encoder.encode(source, target, attrs);
 
 //Next lines extracts audio informations from an AVI and store them in a plain WAV file:

 File source = new File("source.avi");
 File target = new File("target.wav");
 AudioAttributes audio = new AudioAttributes();
 audio.setCodec("pcm_s16le");
 EncodingAttributes attrs = new EncodingAttributes();
 attrs.setFormat("wav");
 attrs.setAudioAttributes(audio);
 Encoder encoder = new Encoder();
 encoder.encode(source, target, attrs);
// Next example takes an audio WAV file and generates a 128 kbit/s, stereo, 44100 Hz MP3 file:

 File source = new File("source.wav");
 File target = new File("target.mp3");
 AudioAttributes audio = new AudioAttributes();
 audio.setCodec("libmp3lame");
 audio.setBitRate(new Integer(128000));
 audio.setChannels(new Integer(2));
 audio.setSamplingRate(new Integer(44100));
 EncodingAttributes attrs = new EncodingAttributes();
 attrs.setFormat("mp3");
 attrs.setAudioAttributes(audio);
 Encoder encoder = new Encoder();
 encoder.encode(source, target, attrs);
// Next one decodes a generic AVI file and creates another one with the same video stream of the source and a re-encoded low quality MP3 audio stream:

 File source = new File("source.avi");
 File target = new File("target.avi");
 AudioAttributes audio = new AudioAttributes();
 audio.setCodec("libmp3lame");
 audio.setBitRate(new Integer(56000));
 audio.setChannels(new Integer(1));
 audio.setSamplingRate(new Integer(22050));
 VideoAttributes video = new VideoAttributes();
 video.setCodec(VideoAttributes.DIRECT_STREAM_COPY);
 EncodingAttributes attrs = new EncodingAttributes();
 attrs.setFormat("avi");
 attrs.setAudioAttributes(audio);
 attrs.setVideoAttributes(video);
 Encoder encoder = new Encoder();
 encoder.encode(source, target, attrs);
 //Next one generates an AVI with MPEG 4/DivX video and OGG Vorbis audio:

 File source = new File("source.avi");
 File target = new File("target.avi");
 AudioAttributes audio = new AudioAttributes();
 audio.setCodec("libvorbis");
 VideoAttributes video = new VideoAttributes();
 video.setCodec("mpeg4");
 video.setTag("DIVX");
 video.setBitRate(new Integer(160000));
 video.setFrameRate(new Integer(30));
 EncodingAttributes attrs = new EncodingAttributes();
 attrs.setFormat("mpegvideo");
 attrs.setAudioAttributes(audio);
 attrs.setVideoAttributes(video);
 Encoder encoder = new Encoder();
 encoder.encode(source, target, attrs);
// A smartphone suitable video:

 File source = new File("source.avi");
 File target = new File("target.3gp");
 AudioAttributes audio = new AudioAttributes();
 audio.setCodec("libfaac");
 audio.setBitRate(new Integer(128000));
 audio.setSamplingRate(new Integer(44100));
 audio.setChannels(new Integer(2));
 VideoAttributes video = new VideoAttributes();
 video.setCodec("mpeg4");
 video.setBitRate(new Integer(160000));
 video.setFrameRate(new Integer(15));
 video.setSize(new VideoSize(176, 144));
 EncodingAttributes attrs = new EncodingAttributes();
 attrs.setFormat("3gp");
 attrs.setAudioAttributes(audio);
 attrs.setVideoAttributes(video);
 Encoder encoder = new Encoder();
 encoder.encode(source, target, attrs);
分享到:
评论

相关推荐

    音视频开发-FFmpeg-n5.1.2开发库

    在"音视频开发-FFmpeg-n5.1.2开发库"中,我们可以看到不同部分的文件,这些文件对于理解和使用FFmpeg至关重要: 1. **MinGW64编译.txt**:这个文件很可能记录了使用MinGW64编译器来构建FFmpeg n5.1.2版本的过程和...

    Windows php-FFmpeg 官网总是没法下载,这里提供方便下载

    - 视频编码和格式:不同的视频编码(如H.264、VP9)和格式(如MP4、WebM)可能需要不同的处理策略。选择适合目标平台的编码和格式,以保证兼容性和性能。 - 性能优化:大规模视频处理可能需要考虑多线程、分片处理...

    java 视频格式转换-ffmpeg

    FFmpeg是一个开源的命令行工具,用于处理音频和视频文件,包括格式转换、编码、解码、分割、合并等操作。在Java中,我们通常通过调用FFmpeg的命令行接口或者使用已经封装好的Java库来实现这些功能。 FFmpeg本身是一...

    linphone-ffmpeg-anyka37e

    总的来说,"linphone-ffmpeg-anyka37e"项目展示了如何利用开源工具和硬件加速技术来构建高质量的实时音视频通话系统。对于想要涉足RTC领域的开发者来说,深入研究这个项目,不仅可以学习到linphone、ffmpeg和硬件...

    wind--php---ffmpeg--32为扩展包

    - 通过 FFmpeg,可以获取视频文件的各种元数据,如视频编码、音频编码、分辨率、比特率、帧率等。在 PHP 中,可以使用 `ffmpeg_movie` 类的属性来获取这些信息。 6. **静态编译**: - "win32-static" 表示这个...

    基于ALSA-FFMPEG实现音频采集与推流功能

    FFmpeg是一个强大的开源工具集,包含了多种用于处理音视频的工具和库,如libavcodec(编码解码)、libavformat(容器格式)、libavfilter(滤镜)等。在音频处理方面,FFmpeg提供了丰富的音频编码器和解码器,支持...

    解析音视频解码-FFmpeg

    它支持多种音视频编码和解码格式,同时也支持多种容器格式,并能够进行高质量的音视频转码、剪辑和滤镜处理等操作。FFmpeg的应用范围非常广泛,不仅包括音视频的录制、转换和流化,还涉及到多媒体数据的传输和存储等...

    PHP-FFMpeg-win32

    FFmpeg是一个强大的跨平台工具集,能够进行音视频编码、解码、转换和流处理。在Windows环境下安装和使用PHP-FFMpeg,需要一些特定的依赖文件,这些文件通常包括FFmpeg的动态链接库(DLL)。 在提供的压缩包文件名...

    PyPI 官网下载 | pytranscoder-ffmpeg-2.2.1.tar.gz

    在此次讨论中,我们将聚焦于一个名为`pytranscoder-ffmpeg-2.2.1.tar.gz`的压缩包,这是一个在PyPI上发布的项目,用于实现音视频的转换和编码。让我们深入了解这个库以及其在分布式环境、云原生应用和Python编程中的...

    gst-ffmpeg,用于Android的GST FFMPEG.zip

    在实际开发中,GST-FFMPEG项目的源代码(如gst-ffmpeg-master)提供了示例和接口,帮助开发者快速理解和集成这一功能。开发者可以参考项目中的示例程序,了解如何创建和配置GStreamer管道,以及如何调用FFmpeg的功能...

    PHP-FFMpeg

    FFmpeg是一个开源项目,它包含了多个软件工具,可以执行各种媒体处理任务,包括编码、解码、转码、分割、合并、裁剪和旋转视频及音频文件。它支持多种常见的视频和音频格式,如MP4、AVI、FLV、MP3和WAV等。FFmpeg...

    音频-麦克风-ffmpeg-aac语音编码VS2010

    3. **FFmpeg**:FFmpeg是一个开源项目,提供一套跨平台的工具和库,用于处理音视频数据。它支持多种编码、解码、格式转换和流媒体功能。 4. **AAC(Advanced Audio Coding)**:AAC是一种音频编码标准,能以较低的...

    ffmpeg-php-win32-all.rar_ffmpeg-php_php-ffmpeg

    它支持各种编码、解码、转换、流媒体操作。而 `ffmpeg-php` 是一个 PHP 扩展,允许 PHP 程序直接调用 FFmpeg 命令行工具进行多媒体处理,如视频截图、转码等操作。在 Windows 环境下,这个扩展尤其方便,因为 PHP 与...

    基于php-ffmpeg完整demo

    FFmpeg是一个强大的开源工具,能够处理音频和视频文件,包括编码、解码、转换以及流媒体操作。这个项目可能是为了帮助开发者理解和应用FFmpeg在实际项目中的功能。 【描述】描述简单明了,它表明提供的资源是一个...

    研究论文-FFMPEG的音视频格式转换设计.pdf

    视频格式转换的需求普遍存在,通过FFMPEG这个开源免费的软件...实验结果表明:FFMPEG软件可以很好地实现视频格式转换,并可按需求改变其中的视频编码方式和音频编码方式,可灵活地转换视频格式,并具有很强的可移植性。

    Laravel开发-ffmpeg-laravel

    在视频处理过程中,可能需要在开始、完成或出现错误时触发相关事件,`ffmpeg-laravel`可能会利用这一特性。 8. **队列处理**:对于耗时的视频处理任务,Laravel的队列系统可以将其放到后台执行,避免阻塞用户界面,...

    opencv_3rdparty-ffmpeg-master_20170418.zip

    - FFmpeg支持众多音视频编码格式,如H.264、VP9、AAC等,这使得OpenCV能够处理各种来源的媒体文件。 - FFmpeg提供了强大的解码能力,可以将原始的二进制数据转化为可供处理的帧。 - FFmpeg具备音视频的转换和格式...

    simple-ffmpeg-player.zip

    FFmpeg是一个强大的跨平台的音频和视频处理工具,被广泛用于音视频的编码、解码、转换、流处理等任务。本项目"simple-ffmpeg-player.zip"是一个基于FFmpeg实现的简单播放器,主要关注音视频处理的核心代码,不涉及...

    QT+FFmpeg实现音视频格式转换

    它支持多种音视频编码解码器,能处理各种常见的音视频格式。FFmpeg的核心组件包括libavformat(用于处理容器格式)、libavcodec(处理编码和解码)、libavutil(提供通用工具函数)和libavfilter(用于视频过滤)。 ...

    PyPI 官网下载 | ha-ffmpeg-0.15.zip

    `ha-ffmpeg-0.15.zip`是其中一个在PyPI上发布的资源,它是一个名为`ha-ffmpeg`的Python库的版本0.15的压缩包。这个库通常是为了简化与FFmpeg工具集的交互而设计的,FFmpeg是一个强大的开源命令行工具,用于处理音频...

Global site tag (gtag.js) - Google Analytics