技术分享| 如何使用 FFmpeg 命令处理音视频
FFmpeg 是领先的多媒体框架,是一个强大的处理音视频的开源库,能够解码、编码、转码、混流、流媒体分离、滤镜和播放几乎所有格式的音视频内容。它既可以使用 API 对音视频进行处理,也可以使用 FFmpeg 命令编辑音视频文件。
包含用于音频、视频和字幕流的多个解码器和编码器,以及多个位流过滤器。
FFmpeg 目录及其作用
libavutil: 是一个包含用于简化编程的函数工具库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。
libavcodec: 是一个包含用于音频/视频编解码器的库。
libavformat: 是一个包含多媒体容器格式的合成器和分离器的库。
libavdevice: 是一个包含输入和输出设备的库,用于抓取和渲染许多常见的多媒体输入/输出软件框架,包括 Video4Linux、Video4Linux2、VfW 和 ALSA。
libavfilter: 是一个包含媒体过滤器的库。
libswscale: 是一个执行高度优化的图像缩放和色彩空间/像素格式转换操作的库。
libswresample: 是一个执行高度优化的音频重采样、rematrixing 和样本格式转换操作的库。
FFmpeg 工具及其作用
ffmpeg: ffmpeg 是一个命令行工具,用于在命令行实现 FFmpeg 具有的功能。
ffplay: ffplay 是一个使用 FFmpeg 库和 SDL 库的非常简单和便携的媒体播放器。它主要用作各种 FFmpeg API 的测试平台。
ffprobe: ffprobe 是一个多媒体流分析工具。它从多媒体流中收集信息,并且以人类和机器可读的形式打印出来。它可以用来检测多媒体流的容器类型,以及每一个多媒体流的格式和类型。它可以作为一个独立的应用来使用,也可以结合文本过滤器执行更复杂的处理。
经过了解了 FFmpeg 的目录及其工具,下面文章着重介绍下在日常生活中,我们怎么使用 FFmpeg 命令行处理音视频文件。
FFmpeg 处理音视频功能说明
FFmpeg 命令根据功能的区分,大致可以分为:录制命令,音视频的合成和分离,音视频的切割与合并,图片、视频互相转换等几个大的模块。下面我们介绍下如何使用 FFmpeg 命令行处理音视频实现以上的几个功能。
本文以 Ubuntu 操作系统为例,通过简单的命令 sudo apt-get install ffmpeg 来安装。
也可以在 Windows,MacOS,其他 Linux 操作系统安装 FFmpeg 后执行一下命令。
1)录制
2)录屏
f 指定使用 avfoundation 采集数据。
-i 指定从哪儿采集数据,它是一个文件索引号。在我的电脑上,1 代表桌面(可以通过上面的命令查询设备索引号)。
-r 指定帧率。按 ffmpeg 官方文档说-r 与-framerate 作用相同,但实际测试时发现不同。-framerate 用于限制输入,而-r 用于限制输出。
3) 录屏+声音
-i 1:0 冒号前面的 "1" 代表的屏幕索引号。冒号后面的"0"代表的声音索相号。
-c:v 与参数 -vcodec 一样,表示视频编码器。c 是 codec 的缩写,v 是 video 的缩写。
-crf 是 x264 的参数。 0 表式无损压缩。
-c:a 与参数 -acodec 一样,表示音频编码器。
-profile 是 fdk_aac 的参数。 aac_he_v2 表式使用 AAC_HE v2 压缩数据。
-b:a 指定音频码率。 b 是 bitrate 的缩写, a 是 audio 的缩与。
4) 录视频
-framerate 限制视频的采集帧率。这个必须要根据提示要求进行设置,如果不设置就会报错。
-f 指定使用 avfoundation 采集数据。
-i 指定视频设备的索引号。
5) 视频+音频
6) 录音
7) 录制音频裸数据
8) 抽取音频流
acodec: 指定音频编码器,copy 指明只拷贝,不做编解码。
vn: v 代表视频,n 代表 no 也就是无视频的意思。
9) 转换为 MP3 格式
10) 抽取视频流
vcodec: 指定视频编码器,copy 指明只拷贝,不做编解码。
an: a 代表视频,n 代表 no 也就是无音频的意思。
11) 视频转格式
上面的命令表式的音频、视频都直接 copy,只是将 mp4 的封装格式转成了 flv。
12) 去除视频声音
13) 视频压缩
14) 音视频合并
15) 提取 YUV 数据
-c:v rawvideo 指定将视频转成原始数据
-pixel_format yuv420p 指定转换格式为 yuv420p
16) 视频 YUV 转 H264
17) 提取音频 PCM 数据
18) PCM 转 WAV
19) 添加水印图片水印:
-vf 中的 movie 指定 logo 位置。scale 指定 logo 大小。overlay 指定 logo 摆放的位置。
文字水印:
20) 视频缩放
-vf scale 指定使用简单过滤器 scale,iw/2:-1 中的 iw 指定按整型取视频的宽度。-1 表示高度随宽度一起变化。
降低视频的分辨率且转换视频格式
21) 视频裁剪
crop 格式:crop=out_w:out_h:x:y
out_w: 输出的宽度。可以使用 in_w 表式输入视频的宽度。
out_h: 输出的高度。可以使用 in_h 表式输入视频的高度。
x : X 坐标
y : Y 坐标
如果 x 和 y 设置为 0,说明从左上角开始裁剪。如果不写是从中心点裁剪。
22) 视频左右(上下)翻转
hflip 水平翻转
如果要修改为垂直翻转可以用 vflip
23) 裁剪片段
-ss 指定裁剪的开始时间,精确到秒
-t 被裁剪后的时长。
24) 音视频合并首先创建一个 videolist.txt 文件,文件内容如下:file 'test1.mp4'file 'test2.mp4'然后执行下面的命令:
25) HLS 切片
-strict -2 指明音频使有 AAC
-f hls 转成 m3u8 格式
26) 视频转 JPEG
27) 图片格式转换
28) 视频按帧截图主要用于用户手动截图或上传视频生成缩略图
此处:-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持,-vframes 设置转换多少桢(frame)的视频,示例命令是获取第一秒第一帧的截图。
注:生成的截图最好使用 jpg 格式,占用空间较小,如果需要使用其他格式,根据业务需求自行设置即可。
29) 视频转 GIF
30) 图片转视频
31) 视频添加字幕 srt
32) 视频添加音乐+字幕
FFmpeg 是一个强大的专门音视频处理的库,很多播放器都是基于 FFmpeg 进行的开发。文章所提的功能只是小编罗列的 FFmpeg 可使用功能的一部分,更多 FFmpeg 命令行可实现处理音视频的功能,大家可以去 FFmpeg 官网查阅相关文档。
版权声明: 本文为 InfoQ 作者【anyRTC开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/9a7d4696d71f844dfe8fbe101】。文章转载请联系作者。
评论