1.什么是ffmpeg
ffmpeg即使一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。
ffmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等; ffmpeg框架提供了多种丰富的插件模块,包含封装和解封装的插件、编码与解码的插件等。
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 FFmpeg编码库可以使用GPU加速。
ffmpeg中文文档
2.ffmpeg的模块:
libavformat
用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能
libavcodec
用于各种类型声音/图像编解码,包括目前多媒体领域中绝大多数常用的编解码格式
libavutil
包含一些公共的工具函数
ibswscale
用于视频场景比例缩放、色彩映射转换
libpostproc
用于后期效果处理
libavfilter
一个通用的音频、视频、字幕等滤镜处理框架,可以用其做一些音视频处理,如音视频倍速、水平翻转、裁剪、加方框、叠加文字等功能
libavdevice
可以读取电脑(或其他设备上)的多媒体设备的数据,或者输出到指定的多媒体设备上
libswresample
提供了高级别的音频重采样API
3.常用命令模板
3.1.转格式
转换视频格式,该命令将 MP4 格式的视频转换为 AVI 格式。
sh
ffmpeg -i input.mp4 output.avi
转换音频格式,该命令将 MP3 格式的音频转换为 Ogg 格式。
sh
ffmpeg -i input.mp3 output.ogg
提取视频中的音频,该命令从输入视频中提取音频并将其保存为 AAC 格式。
sh
ffmpeg -i input.mp4 -vn -acodec copy output.aac
转换视频为 GIF,该命令将输入视频转换为 GIF 动画,先生成调色板,再将其应用于视频。
sh
ffmpeg -i input.mp4 -vf "scale=320:-1:flags=lanczos,palettegen" -y palette.pngffmpeg -i input.mp4 -i palette.png -filter_complex "scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" -y output.gif
提取视频帧,该命令从输入视频中提取每秒钟的一帧,并将这些帧保存为 PNG 格式的图像文件。
sh
ffmpeg -i input.mp4 -r 1 -f image2 output-%03d.png
提取某一帧,该命令从输入视频中提取第30秒的一帧,并将这些帧保存为 PNG 格式的图像文件。
sh
ffmpeg -i input.mp4 -ss 00:00:30 -frames:v 1 output-30.png
3.2.修改视频
调整视频大小,该命令将输入视频的分辨率调整为 640x360 并将输出保存为 MP4 格式。
sh
ffmpeg -i input.mp4 -vf scale=640:360 output.mp4
添加水印,该命令在输入视频的左上角添加一个水印,并将输出保存为 MP4 格式。
sh
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
调整音频音量,该命令将输入音频的音量调整为原来的 2 倍,并将输出保存为 MP3 格式。
sh
ffmpeg -i input.mp3 -af "volume=2" output.mp3
压缩视频,该命令将输入视频压缩为分辨率为 640x? 的视频,并使用 H.264 编码器进行编码。压缩质量由 CRF 参数控制,值越小压缩质量越高。Preset 参数控制编码速度,值越小编码速度越快,但压缩质量可能会降低。
sh
ffmpeg -i input.mp4 -vf "scale=640:-1" -c:v libx264 -crf 23 -preset veryfast -c:a copy output.mp4
添加字幕,该命令将输入视频与字幕文件结合,将字幕文件编码为 mov_text 格式,将输出保存为 MP4 格式。
sh
ffmpeg -i input.mp4 -i subtitle.srt -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=eng output.mp4
旋转视频,该命令将输入视频逆时针旋转 90 度,并将输出保存为 MP4 格式。
sh
ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp4
修改视频的帧率,该命令将输入视频的帧率修改为 30 帧每秒,然后使用 H.264 编码器进行编码。
sh
ffmpeg -i input.mp4 -r 30 -c:v libx264 -crf 23 -preset veryfast -c:a copy output.mp4
3.3.拼接剪辑
裁剪视频,该命令从输入视频的第 10 秒开始裁剪,裁剪时长为 20 秒,然后将裁剪后的视频保存为 MP4 格式。
sh
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:20 -c copy output.mp4
合并多个视频文件,该命令将两个 MP4 格式的视频文件合并为一个文件,并将其保存为 MP4 格式。
sh
ffmpeg -i "concat:input1.mp4|input2.mp4" -c copy output.mp4
分离视频的音频和视频流,该命令将输入视频的音频流和视频流分别保存为 MP3 和 MP4 格式的文件。
sh
ffmpeg -i input.mp4 -vn audio.mp3ffmpeg -i input.mp4 -an -vcodec copy video.mp4
合并音频和视频
sh
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4
如果视频中已经包含了音频,这个时候还可以替换视频中的音频,使用下面命令行。
sh
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -strict experimental-map 0:v:0 -map 1:a:0 output.mp4
拼接音频文件,该命令将两个 MP3 格式的音频文件拼接为一个文件,并将其保存为 MP3 格式。
sh
ffmpeg -i "concat:input1.mp3|input2.mp3" -acodec copy output.mp3
裁剪音频,该命令从输入音频的第 30 秒开始裁剪,裁剪时长为 2 分钟,然后将裁剪后的音频保存为 MP3 格式。
sh
ffmpeg -i input.mp3 -ss 00:00:30 -t 00:02:00 -acodec copy output.mp3