1. 介绍
FFmpeg是一个跨平台的开源多媒体框架,可以用于处理和转换各种音视频格式。它提供了必要的工具和库来进行音视频的录制、转码、播放、流媒体传输等操作,还可以抓取实时的音频/视频流。
FFmpeg 主要包括三块:FFmpeg、FFplay、FFprobe。</br>
使用FFmpeg的常见应用和产品
视频转码器:通过 FFmpeg,可以将视频文件从一个格式转换为另一个格式,例如将 AVI 转换为 MP4、MKV 转换为 MOV 等。
音频转码器:类似于视频转码器,FFmpeg可用于转换音频文件的格式,例如将 MP3 转换为 WAV、AAC 转换为 FLAC 等。
视频编辑软件:一些视频编辑软件,如Adobe Premiere Pro、Final Cut Pro等,使用 FFmpeg 来处理视频文件,包括剪辑、合并、添加字幕、调整画质等功能。
媒体播放器:许多媒体播放器,包括VLC媒体播放器、MPlayer等,使用FFmpeg 解码和渲染音视频文件。
流媒体服务器:FFmpeg 可以用来构建流媒体服务器,将音视频文件以流的方式传输给客户端,实现实时播放或直播功能。
视频截图工具:FFmpeg 提供了截取视频缩略图的功能,可以用来生成视频预览图、视频封面等。
视频压缩工具:通过 FFmpeg,你可以调整视频的分辨率、比特率、帧率等参数,以减小文件大小,实现视频压缩。
2. 安装
下面是一些常用平台的安装指南
2.1 Linux
- 使用包管理器安装FFmpeg
- Debian/Ubuntu: `sudo apt-get install ffmpeg`
- CentOS/Fedora: `sudo yum install ffmpeg`
- 编译安装FFmpeg
- 下载最新的源代码:`wget https://ffmpeg.org/releases/ffmpeg-<version>.tar.gz`
- 解压源代码:`tar -zxvf ffmpeg-<version>.tar.gz`
- 进入解压后的目录:`cd ffmpeg-<version>`
- 配置和编译:`./configure && make && sudo make install`
2.2 macOS
使用Homebrew安装FFmpeg:
brew install ffmpeg
3. 基本用法
命令介绍
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
ffmpeg [全局选项] [输入选项] -i 输入文件 [输出选项] 输出文件...
-
[全局选项]
: 适用于整个转码过程,如设置日志级别、指定硬件加速器等。 -
[输入选项]
: 用于指定输入文件的参数,如输入文件的格式、分辨率、帧率等。 -
[输出选项]
: 用于指定输出文件的参数,如输出文件的格式、编码器、比特率等。
常用选项
-
-c:v
: 指定视频编码器。 -
-c:a
: 指定音频编码器。 -
-b:v
: 设置视频比特率。 -
-b:a
: 设置音频比特率。 -
-s
: 设置输出分辨率。 -
-r
: 设置输出帧率。 -
-ss
: 剪切输入文件的起始时间。 -
-t
: 设置输出文件的持续时间。 -
-vf
: 应用视频滤镜。 -
-af
: 应用音频滤镜。
处理过程
- 读取输入源
- 进行音视频的解封装
- 解码每一帧音视频数据
- 编码每一帧音视频数据
- 进行音视频的重新封装
- 输出到目标
转码
转换一个音视频文件的格式或编码:
ffmpeg -i input.mp4 output.avi
剪切
剪切一个音视频文件的时间段:
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:30 -c copy output.mp4
修改分辨率
修改一个视频文件的分辨率:
ffmpeg -i input.mp4 -vf scale=640:480 output.mp4
提取音频
从一个视频文件中提取音频:
ffmpeg -i input.mp4 -vn -acodec copy output.aac
添加水印
在一个视频文件上添加水印:
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4
图片合成视频
将一系列图片合成为视频:
ffmpeg -framerate 25 -pattern_type glob -i 'input*.png' -c:v libx264 output.mp4
4. 高级用法
视频编解码——视频编码
使用不同的视频编码器对视频进行编码:
ffmpeg -i input.mp4 -c:v libx264 output.mp4 # 使用H.264编码
ffmpeg -i input.mp4 -c:v libvpx output.webm # 使用VP8编码
视频编解码——视频解码
使用不同的视频解码器对视频进行解码:
ffmpeg -i input.mp4 -c:v rawvideo output.avi # 将视频解码为无压缩的原始视频
ffmpeg -i input.mp4 -c:v mjpeg output.avi # 使用MJPEG解码器将视频转换为MJPG格式
编解码——音频编码
使用不同的音频编码器对音频进行编码:
ffmpeg -i input.wav -c:a aac output.m4a # 使用AAC编码器将音频编码为M4A格式
ffmpeg -i input.wav -c:a libopus output.opus # 使用Opus编码器将音频编码为Opus格式
编解码——音频解码
使用不同的音频解码器对音频进行解码:
ffmpeg -i input.mp3 -c:a pcm_s16le output.wav # 将MP3音频解码为无压缩的PCM音频
ffmpeg -i input.aac -c:a pcm_s16le output.wav # 将AAC音频解码为无压缩的PCM音频
常用滤镜
- crop:裁剪视频,可以指定裁剪的起始和结束时间,以及裁剪的宽度和高度。
- scale:缩放视频,可以指定缩放的宽度和高度,以及是否保持纵横比。
- rotate:旋转视频,可以指定旋转的角度。
- flip:翻转视频,可以指定是否水平翻转或垂直翻转。
- contrast:调整视频的对比度。
- brightness:调整视频的亮度。
- saturation:调整视频的饱和度。
- hue:调整视频的色调。
- sharpness锐化:锐化视频,提高图像的清晰度。
- noisereduction降噪:降低视频中的噪声,提高图像的质量。
- deinterlace去隔行:去除视频中的隔行扫描,使图像更加流畅。
- Watermark水印:在视频中添加水印,可以指定水印的位置、大小和透明度。
滤镜-基本滤镜
使用滤镜效果来改善视频或音频:
# 调整亮度
ffmpeg -i input.mp4 -vf "scale=640:480, eq=brightness=0.2" output.mp4
# 调整音量
ffmpeg -i input.mp4 -af "volume=2.0" output.mp4
滤镜-复杂滤镜
使用复杂的滤镜图形链来实现更高级的效果:
# 分割、调整对比度和添加暗角效果
ffmpeg -i input.mp4 -vf "split=2[a][b];[a]eq=contrast=1.2[b];[b]vignette" output.mp4
# 提高音量和应用高通滤波
ffmpeg -i input.mp4 -af "volume=1.5,highpass=f=200" output.mp4
流媒体传输-推送到RTMP服务器
将音视频流推送到RTMP服务器进行直播:
# 推送到RTMP服务器
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://server/live/stream
流媒体传输-拉取RTMP流
从RTMP服务器拉取音视频流进行播放或处理:
# 拉取流并保存为文件
ffmpeg -i rtmp://server/live/stream -c:v copy -c:a copy output.mp4
# 拉取流并在SDL窗口中显示视频
ffmpeg -i rtmp://server/live/stream -vf "scale=640:480" -f sdl "Video Output"
高级选项——编码参数调优
调整编码器的参数以获得更好的音视频质量或压缩率:
# 使用CRF调整视频质量和使用慢速预设以获取更好的压缩
ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset slow output.mp4
# 使用固定比特率设置音频的码率为128kbps
ffmpeg -i input.mp3 -c:a aac -b:a 128k output.m4a
高级选项——处理字幕和元数据
提取、添加或修改视频的字幕和元数据:
# 提取视频中的字幕为MOV Text字幕文件
ffmpeg -i input.mp4 -c:s mov_text output.mp4
# 添加英文字幕并设置语言标签
ffmpeg -i input.mp4 -c:s mov_text -metadata:s:s:0 language=eng output.mp4
# 修改视频的标题和艺术家元数据
ffmpeg -i input.mp4 -metadata title="My Title" -metadata artist="Artist Name" output.mp4
5. 文档查找
ffmpeg -h
ffmpeg -muxers #查看支持的音视频复用器
ffmpeg -h muxer=flv
ffmpeg -codecs #查看支持的编解码器、格式和协议
-version show version
-buildconf show build configuration
-formats show available formats
-muxers show available muxers
-demuxers show available demuxers
-devices show available devices
-codecs show available codecs
-decoders show available decoders
-encoders show available encoders
-bsfs show available bit stream filters
-protocols show available protocols
-filters show available filters
-pix_fmts show available pixel formats
-layouts show standard channel layouts
-sample_fmts show available audio sample formats
-dispositions show available stream dispositions
-colors show available color names
-sources device list sources of the input device
-sinks device list sinks of the output device
-hwaccels show available HW acceleration methods
视频信息分析神器——FFprobe
- -show_format 格式相关信息
- -show_streams 音视频流分析
- -show_packets 音视频包分析
- -show_frames 音视频帧分析
6. 资料
- FFmpeg官方文档:https://ffmpeg.org/documentation.html
- FFmpeg Wiki:https://trac.ffmpeg.org/wiki
- FFmpeg常见问题解答:https://ffmpeg.org/faq.html
- FFmpeg滤镜文档:https://ffmpeg.org/ffmpeg-filters.html
- FFmpeg编码器文档:https://ffmpeg.org/ffmpeg-codecs.html
- FFmpeg格式文档:https://ffmpeg.org/ffmpeg-formats.html