程序员军刀之 ffmpeg -- TBD
2017-07-16 本文已影响36人
老瓦在霸都
Created: 2017-05-02
Status: TBD
Author: Walter Fan
License: CC-BY
ffmpeg 是什么?
A complete, cross-platform solution to record, convert and stream audio and video.
一个跨平台的音视频录制,转换和流式传输的完整解决方案
组件
命令行工具
�软件共享库
�库 | 说明 |
---|---|
libavcodec | 用于各种多媒体编码 |
libavdevice | 用于各种设备 |
libavfilter | 包含一些过滤器 |
libavformat | 音视频媒体格式 |
libavutil | 包含一些实用例程 |
libpostproc | 用于后期处理 |
libswresample | 用于音频重采样 |
libswscale | 用于媒体扩展 |
ffmpeg
ffmpeg调用libavformat库(包含demuxers)来读取输入文件,并从中获取包含编码数据的数据包。 当有多个输入文件时,ffmpeg尝试通过跟踪任何活动输入流上的最低时间戳来保持同步。
然后将编码的数据包传递给解码器(除非为流选择了streamcopy,请参阅进一步的描述)。 解码器产生未经压缩的帧(原始视频/ PCM音频/ ...),可以通过过滤进一步处理(见下一节)。 滤波后,帧被传送到编码器,对编码器进行编码并输出编码的数据包。 最后,这些被传递给复制器,它将编码的数据包写入输出文件。
ffmpeg flow在编码之前,ffmpeg可以使用libavfilter库中的过滤器来处理原始音频和视频帧。 几个链式过滤器形成一个过滤器图。 ffmpeg区分两种类型的过滤器图:简单过滤器图和复杂过滤器图。
[TBD]
用法
ffmpeg [global_options] [input_file_options] -i input_file [output_file_options] output_file
比如
ffmpeg -i 1secs.avi -vn -acodec pcm_s16le -ar 8000 -ac 1 1secs.wav
FAQ
如何根据图片和音频制作视频文件
def make_avi(image_file, wave_file, avi_file):
cmd = "ffmpeg -i %s -i %s -c copy %s " % (image_file, wave_file, avi_file)
print(cmd)
return os.system(cmd)
如何连接两个音频文件?
ffmpeg -f concat -i mylist.txt -c copy output.wav
mylist.txt:
file '4815.wav'
file '4816.wav'
如何将mp3 转换为 wav 文件
- 采样率为8000 Hz, 编码为 pcm, 采样深度为16bit
ffmpeg -i 4898.mp3 -acodec pcm_s16le -ac 1 -ar 8000 4898.wav
参考资料
- 官网: https://ffmpeg.org/
- 官方文档: http://ffmpeg.org/documentation.html
- 官方书籍: ffmpeg basic - http://ffmpeg.tv/