FFMpeg使用介绍

1. 介绍

FFmpeg是一个跨平台的开源多媒体框架,可以用于处理和转换各种音视频格式。它提供了必要的工具和库来进行音视频的录制、转码、播放、流媒体传输等操作,还可以抓取实时的音频/视频流。

FFmpeg 主要包括三块:FFmpeg、FFplay、FFprobe。</br>

使用FFmpeg的常见应用和产品

  1. 视频转码器:通过 FFmpeg,可以将视频文件从一个格式转换为另一个格式,例如将 AVI 转换为 MP4、MKV 转换为 MOV 等。

  2. 音频转码器:类似于视频转码器,FFmpeg可用于转换音频文件的格式,例如将 MP3 转换为 WAV、AAC 转换为 FLAC 等。

  3. 视频编辑软件:一些视频编辑软件,如Adobe Premiere Pro、Final Cut Pro等,使用 FFmpeg 来处理视频文件,包括剪辑、合并、添加字幕、调整画质等功能。

  4. 媒体播放器:许多媒体播放器,包括VLC媒体播放器、MPlayer等,使用FFmpeg 解码和渲染音视频文件。

  5. 流媒体服务器:FFmpeg 可以用来构建流媒体服务器,将音视频文件以流的方式传输给客户端,实现实时播放或直播功能。

  6. 视频截图工具:FFmpeg 提供了截取视频缩略图的功能,可以用来生成视频预览图、视频封面等。

  7. 视频压缩工具:通过 FFmpeg,你可以调整视频的分辨率、比特率、帧率等参数,以减小文件大小,实现视频压缩。

2. 安装

下面是一些常用平台的安装指南

2.1 Linux

  1. 使用包管理器安装FFmpeg
- Debian/Ubuntu: `sudo apt-get install ffmpeg`
- CentOS/Fedora: `sudo yum install ffmpeg`

  1. 编译安装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 输入文件 [输出选项] 输出文件...

  1. [全局选项]: 适用于整个转码过程,如设置日志级别、指定硬件加速器等。
  2. [输入选项]: 用于指定输入文件的参数,如输入文件的格式、分辨率、帧率等。
  3. [输出选项]: 用于指定输出文件的参数,如输出文件的格式、编码器、比特率等。

常用选项

  • -c:v: 指定视频编码器。
  • -c:a: 指定音频编码器。
  • -b:v: 设置视频比特率。
  • -b:a: 设置音频比特率。
  • -s: 设置输出分辨率。
  • -r: 设置输出帧率。
  • -ss: 剪切输入文件的起始时间。
  • -t: 设置输出文件的持续时间。
  • -vf: 应用视频滤镜。
  • -af: 应用音频滤镜。

处理过程

  • 读取输入源
  • 进行音视频的解封装
  • 解码每一帧音视频数据
  • 编码每一帧音视频数据
  • 进行音视频的重新封装
  • 输出到目标
ffmpeg-process.jpg

转码

转换一个音视频文件的格式或编码:

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. 资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容