【音视频】FFmpeg 攻略

FFmpeg 攻略

一、什么是FFmpeg

FFmpeg 是一个开源的跨平台音视频处理工具,它能够实现音视频的录制、转换、编辑、流媒体传输等功能。FFmpeg 提供了一系列的命令行工具,可以用于处理音视频文件,包括视频编解码、音频编解码、封装、解封装、流媒体处理等。

二、FFmpeg主要功能和特点

  • 音视频编解码:FFmpeg 支持众多的音视频编解码器,可以对各种常见的音视频格式进行解码和编码,包括但不限于 H.264、H.265、MPEG-4、AAC、MP3 等。

  • 格式转换:FFmpeg 能够将一个格式的音视频文件转换成另一种格式,比如将 MP4 格式的视频转换为 AVI 格式,或者将 WAV 格式的音频转换为 MP3 格式。

  • 视频剪辑和处理:FFmpeg 允许用户进行视频的剪辑、拼接、分割、旋转、调整分辨率等操作,可以实现一些简单的视频编辑功能。

  • 音频处理:除了视频处理外,FFmpeg 也支持音频文件的处理,可以进行音频剪辑、合并、转码、混音等操作。

  • 流媒体处理:FFmpeg 可以处理网络流媒体,包括流媒体的转发、接收、录制、转码等功能,可以实现直播、视频会议等应用。

  • 滤镜和特效:FFmpeg 提供了丰富的滤镜和特效功能,可以对音视频进行各种效果的处理,比如加水印、调整色彩、模糊、锐化等。

  • GPU 加速:最新版本的 FFmpeg 支持利用 GPU 进行加速,可以提高视频处理的速度和效率。

  • 跨平台性:FFmpeg 是一个跨平台的工具,可以在 Linux、Windows、macOS 等操作系统上运行。

三、FFmpeg安装

  • Linux

在大多数 Linux 发行版中,你可以通过包管理器直接安装 FFmpeg。例如,在 Ubuntu 或 Debian 上,你可以使用以下命令安装:

1
sudo apt-get install ffmpeg
  • macOS

在 macOS 上,你可以使用 Homebrew 包管理器进行安装。首先安装 Homebrew,然后运行以下命令安装 FFmpeg:

1
brew install ffmpeg
  • Windows

在 Windows 上,你可以从 FFmpeg 官网下载预编译的 Windows 版本,并按照安装说明进行安装。你也可以通过包管理器如 Chocolatey 进行安装。

四、使用案例

音视频编解码

假设你有一个名为 input.mp4 的视频文件,你想要将其重新编码为 H.264 视频编解码器和 AAC 音频编解码器,并保存为 output.mp4。

1
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
  • -i input.mp4:指定输入文件为 input.mp4。
  • -c:v libx264:指定视频编码器为 H.264。
  • -c:a aac:指定音频编码器为 AAC。
  • output.mp4:指定输出文件名为 output.mp4。

格式转换

假设你有一个名为 input.avi 的 AVI 格式视频文件,你想要将其转换为 MP4 格式并保存为 output.mp4。

1
ffmpeg -i input.avi output.mp4
  • -i input.avi:指定输入文件为 input.avi。
  • output.mp4:指定输出文件名为 output.mp4。

视频剪辑

假设你有一个名为 input.mp4 的视频文件,你想要从第 10 秒开始截取持续 20 秒的视频片段,并保存为 output.mp4。

1
ffmpeg -i input.mp4 -ss 10 -t 20 -c copy output.mp4
  • -i input.mp4:指定输入文件为 input.mp4。
  • -ss 10:指定从第 10 秒开始剪辑视频。
  • -t 20:指定剪辑视频的持续时间为 20 秒。
  • -c copy:指定使用原始视频的编解码器进行剪辑,以保持视频质量。
  • output.mp4:指定输出文件名为 output.mp4。

音频处理

假设你有一个名为 input.mp3 的音频文件,你想要将其转换为 WAV 格式并添加混响效果,然后保存为 output.wav。

1
ffmpeg -i input.mp3 -af "aecho=0.8:0.9:1000:0.3" output.wav
  • -i input.mp3:指定输入文件为 input.mp3。
  • -af “aecho=0.8:0.9:1000:0.3”:添加混响效果。其中参数 0.8 表示延迟时间,0.9 表示混响程度,1000 表示混响间隔,0.3 表示混响反馈。
  • output.wav:指定输出文件名为 output.wav,并将音频转换为 WAV 格式。

流媒体处理

假设你有一个名为 input.mp4 的视频文件,你想要将其转换为实时流媒体,并通过 HTTP 协议进行传输。

1
ffmpeg -i input.mp4 -c:v copy -c:a aac -strict experimental -f flv rtmp://localhost/live/stream
  • -i input.mp4:指定输入文件为 input.mp4。
  • -c:v copy:选择视频流的编码器为复制,保持视频不进行重新编码。
  • -c:a aac -strict experimental:选择音频流的编码器为 AAC,并指定使用实验性的 AAC 编码器。
  • -f flv:指定输出格式为 FLV 格式,FLV 是一种常用的流媒体传输格式。
  • rtmp://localhost/live/stream:指定流媒体服务器地址和流名称,这里假设使用了 RTMP 协议,流名称为 stream,并且流媒体服务器地址是 localhost。

滤镜和特效案例

假设你有一个名为 input.mp4 的视频文件,你想要在视频上叠加一个文本水印,并添加模糊效果,然后保存为 output.mp4。

1
ffmpeg -i input.mp4 -vf "drawtext=text='Your Text Here':x=10:y=10:fontsize=24:fontcolor=white:shadowcolor=black:shadowx=2:shadowy=2,boxblur=5" -c:a copy output.mp4
  • -i input.mp4:指定输入文件为 input.mp4。
  • -vf “drawtext=text=’Your Text Here’:x=10:y=10:fontsize=24:fontcolor=white:shadowcolor=black:shadowx=2:shadowy=2,- boxblur=5”:指定视频滤镜。其中:
    • drawtext 滤镜用于在视频上绘制文本水印,参数包括文本内容、位置、字体大小、字体颜色、阴影颜色等。
    • boxblur 滤镜用于添加模糊效果,参数为模糊半径。
  • -c:a copy:选择音频流的编码器为复制,保持音频不进行重新编码。
  • output.mp4:指定输出文件名为 output.mp4。

五、调用方式

nodejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const { exec } = require('child_process');

// 定义 FFmpeg 命令
const ffmpegCommand = 'ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4';

// 调用 FFmpeg 命令
exec(ffmpegCommand, (error, stdout, stderr) => {
if (error) {
console.error(`执行命令时发生错误: ${error.message}`);
return;
}
if (stderr) {
console.error(`FFmpeg 输出错误: ${stderr}`);
return;
}
console.log(`FFmpeg 输出: ${stdout}`);
console.log('音视频编解码完成!');
});

喜欢这篇文章?打赏一下支持一下作者吧!
【音视频】FFmpeg 攻略
https://www.cccccl.com/20231221/音视频/FFmpeg 攻略/
作者
Jeffrey
发布于
2023年12月21日
许可协议