FFmpeg 入门指南:多媒体处理的瑞士军刀

在音视频处理的世界里,FFmpeg 是当之无愧的王者。无论你是开发者、视频剪辑师,还是仅仅想转换视频格式的普通用户,它都是一款不可或缺的神器。

虽然它是一个没有图形界面(GUI)的命令行工具,看起来有些"极客",但一旦掌握了它的基本逻辑,你将拥有极其强大的视频控制力。

什么是 FFmpeg?

FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包含了非常先进的音频/视频编解码库 libavcodec。

为什么选择它?

  • 全能: 几乎支持所有已知的音视频格式。

  • 高效: 处理速度极快,尤其是使用流复制模式时。

  • 跨平台: Windows, macOS, Linux 通吃。

核心地位: 许多著名的播放器(如 VLC)和剪辑软件内部都使用了它的库。

1. 核心逻辑与语法

FFmpeg 的命令虽然看似复杂,但万变不离其宗。其最基础的语法结构如下:

bash 复制代码
ffmpeg [全局参数] -i [输入文件] [输出参数] [输出文件]
  • ffmpeg:调用程序的命令。

  • -i:Input 的缩写,指定输入文件。

  • 输出参数\]:这是最关键的部分,你在这里告诉 FFmpeg 你想做什么(改变编码、调整尺寸、裁剪时间等)。

以下是 80% 的用户在 90% 的场景下会用到的命令。

A. 格式转换(最基础)

将 MP4 视频转换为 MKV 格式,或者将视频转为 GIF。

bash 复制代码
# 视频格式转换
ffmpeg -i input.mp4 output.mkv
bash 复制代码
# 视频转 GIF
ffmpeg -i input.mp4 output.gif

B. 提取音频

想把 MV 里的歌提取出来存为 MP3?

Bash

bash 复制代码
ffmpeg -i video.mp4 -vn output.mp3
#注: -vn 代表 Video No,即禁用视频流,只保留音频。

C. 极速剪切(无损)

不需要重新编码,瞬间切出你需要的一段视频。

bash 复制代码
ffmpeg -ss 00:00:10 -t 00:00:30 -i input.mp4 -c copy output.mp4
  • -ss:开始时间(Start at)。

  • -t:持续时间(Duration)。

  • -c copy:灵魂参数。表示直接复制流,不进行重新编码(解码再编码),速度极快且画质无损。

D. 视频压缩(控制画质)

视频文件太大了?使用 H.264 编码并调整 CRF 值。

bash 复制代码
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
  • -c:v libx264:指定使用 H.264 编码器。

  • -crf:Constant Rate Factor(恒定速率因子)。范围通常在 0-51。

  • 23 是默认值。

  • 数字越小,画质越好,文件越大。

  • 数字越大,画质越差,文件越小。

  • 通常建议在 18-28 之间调整。

E. 调整分辨率

将 4K 视频压缩为 1080p。

bash 复制代码
ffmpeg -i input.mp4 -vf scale=1920:1080 output.mp4
  • -vf:视频滤镜(Video Filter)。

如果你只想指定宽度,高度自动按比例缩放,可以写成 scale=1920:-1。

F. 给视频静音

移除视频中的音频流。

bash 复制代码
ffmpeg -i input.mp4 -an output.mp4
  • -an:Audio No,即移除音频。

3. 进阶技巧:滤镜与复杂操作

FFmpeg 的强大之处在于其滤镜系统(Filters)。

添加水印:

bash 复制代码
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

这将把 watermark.png 叠加在视频的左上角(坐标 10,10)。

视频倍速: 可以通过调整 PTS(显示时间戳)来改变播放速度。

bash 复制代码
# 2倍速播放(视频)
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4

结语

FFmpeg 的命令参数浩如烟海,不需要死记硬背。掌握上述的输入 -> 参数 -> 输出 逻辑,理解 -c copy 和 -crf 等核心概念,你就已经超越了绝大多数用户。

查看ffmpeg的参数

bash 复制代码
ffmpeg -version

如何进行MP4转wav

bash 复制代码
ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 output.wav
  • -i input.mp4: 输入文件名。
  • -vn: Video None,即不要视频流。
  • -acodec pcm_s16le: 指定编码为 PCM 16-bit(标准的 WAV 编码)。
  • -ar 44100: 采样率设为 44.1kHz(CD音质)。
  • -ac 2: 双声道。

简易版本

自动判断参数

bash 复制代码
ffmpeg -i input.mp4 output.wav
相关推荐
CHANG_THE_WORLD1 小时前
C语言中的 %*s 和 %.*s 和C++的字符串格式化输出
c语言·c++·c#
消失的旧时光-19431 小时前
C语言对象模型系列(四)《Linux 内核里的 container_of 到底是什么黑魔法?》—— 一篇讲透 Linux 内核的“对象模型”核心技巧
linux·c语言·算法
2501_931803752 小时前
Go:一门为解决C语言痛点而生的现代语言
c语言·开发语言·golang
qeen873 小时前
【数据结构】二叉树相关经典函数C语言实现
c语言·数据结构·c++·笔记·学习·算法·二叉树
Hello.Reader5 小时前
ds4.c 深度解析为 DeepSeek V4 Flash 打造的本地推理引擎
c语言·开发语言
谙弆悕博士6 小时前
快速学C语言—— 第0章:C语言简介
c语言·开发语言·经验分享·笔记·程序人生·课程设计·学习方法
谙弆悕博士8 小时前
Lua学习笔记
c语言·开发语言·笔记·学习·lua·创业创新·业界资讯
qq3862461968 小时前
C语言中将数字转换为字符串的方法
c语言·格式化输出·字符串转换·sprintf·snprintf
LuminousCPP9 小时前
C 语言动态内存管理全解析:从基础函数到柔性数组与内存分区
c语言·经验分享·笔记·学习·柔性数组
Lazionr9 小时前
【栈与队列经典OJ】
c语言·数据结构