编程笔记

程序员军刀之 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 文件

ffmpeg -i 4898.mp3 -acodec pcm_s16le -ac 1 -ar 8000 4898.wav

参考资料

上一篇下一篇

猜你喜欢

热点阅读