FFmpeg的实践
首先简单介绍一下FFmpeg,FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它支持多种音视频格式,广泛应用于音视频处理、转换以及流媒体处理等领域。作为一款命令行程序,FFmpeg的适用场景是非常广泛的,能够在各种操作系统下非常简单地安装、配置和使用。同时由于其开源的特性,也有相当的可扩展性与可修改性。
FFmpeg的简介
首先简单介绍一下FFmpeg,FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它支持多种音视频格式,广泛应用于音视频处理、转换以及流媒体处理等领域。
作为一款命令行程序,FFmpeg的适用场景是非常广泛的,能够在各种操作系统下非常简单地安装、配置和使用。同时由于其开源的特性,也有相当的可扩展性与可修改性。
FFmpeg的安装与配置
首先前往FFmpeg(官网)

本文章以windows环境为例子,选择以上选项跳转前往github(可能需要梯子)下载资源包。

可以看到FFmpeg为用户提供了相当多的版本以适用各式各样的使用环境,具体选择哪个版本进行下载可以参考以下链接FFmpeg 安装包全攻略:gpl、lgpl、shared、master 区别详解_ffmpeg安装包-CSDN博客
下载完成后将文件解压得到如下文件夹
进入./bin即可直接在命令行使用ffmpeg指令,输入ffmpeg或ffmpeg -version即可查看版本信息

如果希望在全局命令行下使用,需要额外在环境变量中添加../bin文件夹的路径

添加完毕后即可直接在任意路径下使用ffmpeg的相关指令
FFmpeg的常用使用方法
# 将 MP4 转换为 AVI
ffmpeg -i input.mp4 output.avi
# 转换视频格式并指定编码器(H.264 视频 + AAC 音频)
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
# 提取音频(保留原始音频编码)
ffmpeg -i input.mp4 -vn -c:a copy output.aac
# 提取视频(去掉音频)
ffmpeg -i input.mp4 -an output_video.mp4
# 将视频调整为 1280x720 分辨率
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
# 修改帧率为 30fps
ffmpeg -i input.mp4 -r 30 output.mp4
# 剪切从 00:01:30 开始,持续 10 秒的视频
ffmpeg -i input.mp4 -ss 00:01:30 -t 10 -c copy output.mp4
# 精确剪切(重新编码,避免关键帧问题)
ffmpeg -i input.mp4 -ss 00:01:30 -t 10 -c:v libx264 output.mp4
# 合并两个视频
# 创建一个文本文件 `list.txt` 包含要合并的文件:
# file 'file1.mp4'
# file 'file2.mp4'
ffmpeg -f concat -i list.txt -c copy output.mp4
# 添加图片水印(位置:右上角,边距 10px)
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:10" output.mp4
# 将视频码率限制为 1Mbps
ffmpeg -i input.mp4 -b:v 1M -bufsize 1M output.mp4
# 压缩视频(CRF 值,18-28 是常用范围,越小质量越高)
ffmpeg -i input.mp4 -crf 23 output.mp4
# 提取视频帧为图片
# 每秒提取 1 帧(按帧数)
ffmpeg -i input.mp4 -r 1 -f image2 frame_%04d.png
# 按时间间隔(每 5 秒一帧)
ffmpeg -i input.mp4 -vf fps=1/5 frame_%04d.jpg
# 录制屏幕(Linux/macOS 需要指定设备)
ffmpeg -f avfoundation -i "1" -r 30 screen_recording.mp4 # macOS
ffmpeg -f gdigrab -i desktop screen_recording.mp4 # Windows
# 录制摄像头(Linux 使用 `v4l2`)
ffmpeg -f v4l2 -i /dev/video0 -vf format=yuv420p camera.mp4
# 推流到 RTMP 服务器
ffmpeg -i input.mp4 -c:v libx264 -preset fast -f flv rtmp://server/live/stream_key
# 从网络流保存到本地
ffmpeg -i http://example.com/stream.m3u8 -c copy output.mp4
常用参数说明
-
-i:输入文件。 -
-c:v/-c:a:指定视频/音频编码器(copy表示不重新编码)。 -
-vf:视频滤镜(如缩放、裁剪、旋转等)。 -
-ss/-t:剪切起始时间/持续时间。 -
-preset:编码速度与压缩率权衡(如ultrafast,fast,medium)。
更详细指令可以参考FFmpeg 命令大全:视频处理与转码实战指南-CSDN博客
FFmpeg的原理
FFmpeg处理文件的大体流程如下

1.解封装:从输入的文件(如MP4、MKV)中分离出音频流、视频流、字幕流等等,具体主要使用组件为libavformat(负责封装/解封装)
2.解码:将压缩的音视频数据(如 H.264、AAC)解码为 原始数据(YUV/PCM),具体主要使用的组件为libavcodec(编解码核心库)
3.处理:对原始的音视频数据进行如裁剪、缩放、降噪、混音等操作,具体主要使用的组件为
libavfilter(滤镜系统)
4.编码:将处理完毕的原始数据再重新压缩(如 H.264、AAC),具体主要使用的组件为
libavcodec(编解码核心库)
5.封装:将编码后的音视频数据流封装为目标格式(如MP4、MKV),具体主要使用组件为libavformat(负责封装/解封装)
相关文档与社区内容
以下是 FFmpeg 相关的官方资源链接,这些资源对于获取最新信息、下载软件和查阅文档非常有用:
FFmpeg 官方网站:https://ffmpeg.org/
FFmpeg 官方下载页面:https://ffmpeg.org/download.html
FFmpeg 官方文档:https://ffmpeg.org/documentation.html
FFmpeg 源代码仓库:https://github.com/FFmpeg/FFmpeg
FFmpeg 邮件列表:https://ffmpeg.org/contact.html
FFmpeg 社区论坛:https://community.notepad-plus-plus.org/
Stack Overflow:https://stackoverflow.com/questions/tagged/ffmpeg
Reddit 的 FFmpeg 社区:https://www.reddit.com/r/FFmpeg/
Video Editing 论坛:https://forum.doom9.org/
Linux 用户论坛:如 Ubuntu Forums、Fedora Forums 等,这些论坛中通常有专门的 FFmpeg 讨论区。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)