简介

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

ffmpeg 是一款非常快速的视频和音频转换器, 是开源项目 FFmpeg (Fast Forward moving pictures expert group) 的命令行程序。 它可以在任意采样率之间转换,并通过高质量的多相滤波器实时调整视频大小。

ffmpeg 程序的转码流程,如下所示

 _______              ______________
| | | |
| input | demuxer | encoded data | decoder
| file | ---------> | packets | -----+
|_______| |______________| |
v
_________
| |
| decoded |
| frames |
|_________|
________ ______________ |
| | | | |
| output | <-------- | encoded data | <----+
| file | muxer | packets | encoder
|________| |______________| 其中, demuxer 为解复用器, muxer 为复用器; decoder 为解码器, encoder 为编码器 

具体使用示例

假定 PCM 音频格式 s16le (signed 16 bits little endian, 有符号 16 位小端) , 更多格式参见"补充内容 - 1. PCM格式".

1. PCM 音频转换为 WAV 格式

ffmpeg -y -f s16le -ar 16k -ac  -i input.raw output.wav

其中, -y 表示无需询问,直接覆盖输出文件; -f s16le 用于设置文件格式为 s16le ; -ar 16k 用于设置音频采样频率为 16k; -ac 1 用于设置通道数为 1; -i input.raw 用于设置输入文件为 input.raw; output.wav 为输出文件.

2. PCM 音频转换为 MP3 格式

ffmpeg -y -f s16le -ar 16k -ac  -i input.raw output.mp3

注: 与PCM音频转换为WAV命令相比, 只有输出文件不同, 其他相同.

3. WAV 音频转换为 PCM 格式

ffmpeg -y  -i input.wav  -acodec pcm_s16le -f s16le -ac 1 -ar 16k output.pcm

其中, -acodec 用于设置音频的编码器和解码器(codec, 即 coder-decoder 的混成词). 也是参数 -codec:a 的别名, 其中a表示 audio.

4. MP3 音频转换为 PCM 格式

ffmpeg -y  -i input.mp3  -acodec pcm_s16le -f s16le -ac 1 -ar 16k output.pcm

5. WAV 音频转换为 MP3 格式

ffmpeg -y  -i input.wav  input.mp3

6. MP3 音频转换为 WAV 格式

ffmpeg -y  -i input.mp3  input.wav

补充内容

1. PCM 格式

PCM, 英文全称为 pulse-code modulation, 中文名为脉冲编码调制, 是用于数字化表示采样后的模拟信号的一种方法. 其也是数字音频的标准形式. 更多内容参见 Pulse-code modulation, Wikipedia. 由于 PCM 音频只包含数据, 没有数据头指定采样率, 通道数, 数据位数等, 所以需要在转码(transcoding)前, 指定这些参数. 在 ffmpeg 程序中, 支持多种格式的 PCM 数据, 如下所示:

$ ffmpeg -formats | grep PCM
DE alaw PCM A-law
DE f32be PCM -bit floating-point big-endian
DE f32le PCM -bit floating-point little-endian
DE f64be PCM -bit floating-point big-endian
DE f64le PCM -bit floating-point little-endian
DE mulaw PCM mu-law
DE s16be PCM signed -bit big-endian
DE s16le PCM signed -bit little-endian
DE s24be PCM signed -bit big-endian
DE s24le PCM signed -bit little-endian
DE s32be PCM signed -bit big-endian
DE s32le PCM signed -bit little-endian
DE s8 PCM signed -bit
DE u16be PCM unsigned -bit big-endian
DE u16le PCM unsigned -bit little-endian
DE u24be PCM unsigned -bit big-endian
DE u24le PCM unsigned -bit little-endian
DE u32be PCM unsigned -bit big-endian
DE u32le PCM unsigned -bit little-endian
DE u8 PCM unsigned -bit

其中,  A-law 和 mu-law 都是压缩和扩展算法 (companding algorithm). 在 8 位 PCM 数字通信系统中, 用于优化模拟信号数字化的动态范围. A-law 算法主要应用在欧洲, 而 mu-law 算法主要应用在北美和日本. 更多内容,参见 A-law algorithm, Wikipedia 和 μ-law algorithm, Wikipedia .

2. 使用 ffplay 播放音频

$ ffplay [options] [input_url]

ffplay 是一款使用 FFmpeg 库(用于转换视频和音频文件, 官方网址为 https://ffmpeg.org) 和 SDL 库(Simple DirectMedia Layer, 一个跨平台的开发库, 用于通过 OpenGL 和 Direct3D, 提供对音频, 鼠标, 操纵杆和图形硬件的低层访问, 官方网址为 https://www.libsdl.org), 主要用于各种 FFmpeg API 的测试平台.

注意: 播放PCM文件时, 同样需要指定具体参数信息.

具体播放命令, 示例如下:

1). 播放 s16le 格式的 PCM 文件 input.raw

$ ffplay -f s16le -ac 1 -ar 16k -i input.raw

其中, -i 参数可以省略

2). 播放 wav 格式文件

$ ffplay -i input.wav

3). 播放 mp3 格式文件

$ ffplay -i input.mp3

参考资料

1. ffmpeg Documentation. https://ffmpeg.org/ffmpeg.html

2. Can ffmpeg convert audio to raw PCM? If so, how? https://stackoverflow.com/questions/4854513/can-ffmpeg-convert-audio-to-raw-pcm-if-so-how

3. FFmpeg wiki: audio types. https://trac.ffmpeg.org/wiki/audio%20types

4. ffplay Documentation. https://ffmpeg.org/ffplay.html

5. FFmpeg - Wikipedia. https://en.wikipedia.org/wiki/FFmpeg

ffmpeg 简介及使用的更多相关文章

  1. Ffmpeg简介

    http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 FFmpeg is a complete solution to record, conve ...

  2. FFmpeg 学习(一):FFmpeg 简介

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

  3. 第一章 FFmpeg简介

    1.1 FFmpeg的定义 Fast Forward Moving Picture Experts Group(动态图像专家组) 1.2 FFmpeg的历史 1.3 FFmpeg的基本组成 1 FFm ...

  4. Windows下FFmpeg快速入门

    本系列文章导航 Windows下FFmpeg快速入门 ffmpeg参数解释 mencoder和ffmpeg参数详解(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进行视 ...

  5. Windows下FFmpeg快速入门 <第二篇>

    FFmpeg简介 FFmpeg是什么? FFmpeg是用于录制.转换和流化音频和视频的完整解决方案, 包括 libavcodec ,一套领先的音/视频编解码类库.FFmpeg 在Linux上开发,当可 ...

  6. 【Linux】关于ffmpeg的一些常见用法

    一.FFmpeg简介 FFmpeg是一款非常快速的视频和音频转换器, 是开源项目 FFmpeg (Fast Forward moving pictures expert group) 的命令行程序. ...

  7. C++调用ffmpeg.exe提取视频帧

    有时候,我们获得一段视频,需要将其中的每一帧都提取出来,来进行一些相关的处理,这时候我们就可以需要用到ffmpeg.exe来进行视频帧的提取. ffmpeg简介:FFmpeg是一套可以用来记录.转换数 ...

  8. Windows配置ffmpeg

    一.ffmpeg简介 ffmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案. 支持操作系统: ...

  9. 玩转音频、视频的利器:FFmpeg

    导语 当下直播平台发展十分迅猛,依靠游戏内直播平台的发展带动游戏活跃提升收入,那么对于我们开发来说如何玩转视频呢?下面就来介绍一个音频.视频处理利器——FFmpeg. FFmpeg 简介 FFmpeg ...

随机推荐

  1. Zynq-7000 FreeRTOS(二)中断:PL中断请求

    总结Zynq-7000的PL发送给PS一个中断请求,为FreeRTOS中断做准备. UG585的P225显示了系统的中断框图,如下图所示. 图:ZYNQ器件的中断框图 UG585的P227画出来中断控 ...

  2. Html5与本地App资料整理分析

    最近开发了一个小的手机网站,重新了解了本地应用,html5,混合应用,webApp等概念,整理下相关的资料,略带自己的思考 用户固有的使用习惯 在<2012年度 HTML5状况及发展形势报告.p ...

  3. wusir 线程间操作无效: 从不是创建控件“”的线程访问它 解决办法

    利用FileSystemWatcher设计一个文件监控系统时,如果一个文件被修改或者新建,则文件修改事件会被多次触发而产生多条信息.为了将一个文件被修改一次而产生的多条信息归结为一条,在设计中新开了一 ...

  4. GB2312编码(为什么要加2020H、8080H,外码→内码→交换码→字形码)

    为什么要加上2020H和8080H? 区位码.内码.国标码怎么转换非常简单,但是令人迷惑的是为什么要那么转换?这种转换不可能平白无故地那样转换! 我搜索很多资料,找到最好的解释,总结如下: 首先,注意 ...

  5. Entwurfsmuster

    1 Entwurfsmuster 1.1 Das Begriff Entwurfsmuster (englisch design patterns) sind bewährte Lösungsscha ...

  6. CC2530串口工作

    前言 嘿嘿,我只是写给我自己的一篇博客,今天研究了一天的CC2530,感觉好累,虽然是已经落伍的技术了,但是我觉得不要小看它,还是能够学到点东西的,随着学习的深入,渐渐感觉有点突破的苗头了!哈哈 CC ...

  7. unity 和 iOS/Android 信息交互(方法调用)

    参考文章均来源于[大神雨松momo]的文章. unity -> iOS // unity 程序 usingSystem.Runtime.InteropServices; usingUnityEn ...

  8. php中continue关键字

    跳出本次循环进行下一次. 在while和do while中也可以用 $num = 0; while($num < 10) { $num ++; if($num === 5) { echo 'eq ...

  9. mysql8.0遇到删除外键的错误

    错误信息:Cannot drop index 'energy_type_id': needed in a foreign key constraint 创建device表的信息 CREATE TABL ...

  10. Z_Tree的使用案例(出差地点的演示)

    1.准备工作(下载zTree并添加到项目JS中) 2.HTML代码 <link rel="stylesheet" href="./js/zTree_v3-3.5.2 ...