ffmpeg,一套能够处理音频、视频和其它多媒体文件及流的完整解决方案

简介

FFmpeg 是一套能够处理音频、视频和其它多媒体文件及流的完整解决方案。由于其无与伦比的通用性和强大的功能,它被誉为数字媒体领域的“瑞士军刀”。

官网:https://ffmpeg.org/

核心组成

FFmpeg 项目不仅仅是一个单一的程序,它主要由以下几个部分构成:

  1. ffmpeg:这是最核心的命令行工具。用户通过它来进行音视频的转码(格式转换)、剪辑、缩放、添加滤镜、合并文件等几乎所有操作。绝大多数人说“使用 FFmpeg”时,指的就是使用这个工具。

  2. ffplay:一个基于 SDL 和 FFmpeg 库的简易媒体播放器。它功能简单,但非常适合用来快速预览和测试经过 ffmpeg 处理后的文件,或者直接播放各种奇特的媒体格式。

  3. ffprobe:一个媒体信息分析工具。它可以从音视频文件中提取出详细的元数据(Metadata)和流信息,例如编码格式、分辨率、帧率、码率、时长、音轨、字幕等。这对于调试和自动化处理流程至关重要。

  4. 一系列核心库 (Libraries):这才是 FFmpeg 的真正动力源泉。许多著名的软件(如 VLC 播放器、Chrome 浏览器、YouTube、Blender 等)都在底层使用了 FFmpeg 的库来处理多媒体。主要包括:

    • libavcodec:包含了几乎所有主流的音视频编码器和解码器。
    • libavformat:用于处理各种多媒体容器格式(如 MP4, MKV, AVI)的封装和解封装。
    • libavfilter:提供了丰富的音视频滤镜,如裁剪、缩放、水印、调速等。
    • libavutil:包含了一些核心的工具函数。
    • libswscale:用于图像的缩放和色彩空间转换。
    • libswresample:用于音频的重采样。

主要功能

FFmpeg 的功能几乎涵盖了音视频处理的方方面面,以下是一些最常见的应用场景:

  • 格式转换 (Transcoding):将视频从一种格式转换到另一种,例如 MKVMP4MOVWebM
  • 编解码转换:改变视频的编码方式,例如将 H.264 编码的视频转换为更高效的 H.265 (HEVC)
  • 剪辑与合并:从一个长视频中截取一小段,或者将多个视频片段无缝拼接成一个文件。
  • 调整参数:改变视频的分辨率、帧率、码率,以适应不同设备或网络环境。
  • 音视频分离/合并:从视频中提取出音频轨道(例如 MP4 -> MP3),或为视频添加新的音轨。
  • 添加滤镜和效果:给视频添加水印、文字、模糊效果,调整亮度/对比度,旋转视频等。
  • 屏幕录制:可以直接录制桌面操作。
  • 制作 GIF:将视频片段转换为高质量的 GIF 动图。
  • 直播推流:将本地视频文件或摄像头/桌面捕获的画面推送到流媒体服务器(RTMP/HLS 协议)。

安装

下载地址:https://ffmpeg.org/download.html

将解压后 bin 目录的路径添加到系统的 PATH 环境变量中。这样你就可以在任何路径下直接运行 ffmpeg 命令,而不需要每次都输入完整路径。

语法

FFmpeg 是通过命令行操作的,语法通常是:

1
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
  • [] (方括号): 表示可选参数或选项。 这意味着这部分内容可以存在,也可以不存在,ffmpeg 仍然可以正常运行。
  • {} (花括号): 表示必须参数或选项。 这意味着这部分内容是必需的,ffmpeg 才能正常运行。

选项:

  • -vn:忽略输入文件中的视频流
  • -acodec:指定音频编码器 (Audio Codec),可选的有:
    • copy: 直接复制音频流,不进行重新编码。 这通常是最快的,并且不会降低音频质量(如果输入音频已经是你想要的格式)。
    • libmp3lame: 使用 LAME MP3 编码器。 这是创建 MP3 文件的常用选择。需要安装 LAME 库才能使用。
    • aac: 使用 AAC (Advanced Audio Coding) 编码器。 AAC 通常比 MP3 提供更好的音质。
    • libfdk_aac: 使用 Fraunhofer FDK AAC 编码器。 比 aac 性能更好,但可能需要单独编译支持。
    • libopus: 使用 Opus 编码器。 提供非常好的音质,尤其是在较低的比特率下。
    • pcm_s16le: 使用 PCM (Pulse Code Modulation) 编码器,将其保存为 16 位 Little Endian PCM,通常用于未经压缩的音频(例如 WAV 文件)。
    • flac: 使用 FLAC (Free Lossless Audio Codec) 编码器。 用于无损压缩音频。

使用

查看文件信息

这是处理任何文件的第一步。

1
ffprobe video.mp4

或者

1
ffmprg -i video.mp4

格式转换 (将 MP4 转换为 AVI)

1
ffmpeg -i input.mp4 output.avi

FFmpeg 会自动根据输出文件的扩展名选择合适的编码器。

改变视频分辨率 (缩放到 1280x720)

1
ffmpeg -i input.mp4 -vf scale=1280:720 output_720p.mp4

-vf 代表 “video filter”(视频滤镜)。scale 是其中一个滤镜。

提取音频 (保存为 MP3)

1
ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3
  • -vn: 表示 “no video”(不包含视频)。
  • -acodec libmp3lame: 指定使用 LAME 库来编码 MP3。

提取音频(不转换)

1
ffmpeg -i [输入视频文件] -ss [开始时间] -to [结束时间] -vn -acodec copy [输出音频文件]

剪切视频 (从第 10 秒开始,持续 15 秒)

1
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:15 -c copy output_cut.mp4
  • -ss: seek start (开始时间)。
  • -t: duration (持续时间)。
  • -c copy: 表示“直接复制流”,不对音视频进行重新编码。这样做速度极快,且无质量损失,是剪辑、合并时的首选。
页面浏览量Loading
网站总访客数:Loading
网站总访问量:Loading
使用 Hugo 构建
主题 StackJimmy 设计
-->