使用 FFmpeg 处理视频

      本教程将详细讲解FFmpeg命令。

      处理一个音视频技术是大部分人的需求。比如视频的剪切、合并;视频转码;例如:您下载网上的 *.ts 切片文件,但每个切片文件仅有3-5秒。此时您就可以使用FFmpeg将其合并转码为 *.mp4 文件。再例如:剪切视频、去水印。一般,您在网络上下载的视频,或用其他视频制作软件制作的视频总是带有不需要的片头或水印。此时,您可用FFmpeg将其去除,仅需一行命令即可。本文从下载到使用,并列举了一些常用的简单命令。您看完后,可以动手操作,加深印象。

软件获取及配置

获取FFmpeg

请在以下链接下载FFmpeg:
https://docs-fuyeor.lanzous.com/iEdSBmsykdc
密码:2d4x

官方链接:https://www.ffmpeg.org/download.html

下载后,将其解压在C盘的根目录下。示例路径:

C:\ffmpeg

配置环境变量

  • 在Windows任务栏搜索框内搜索 ”编辑系统环境变量“ 并打开;
  • Windows Server用户若提示被禁用,请从:控制面板\所有控制面板项\用户帐户 左侧 “更改我的环境变量”开始。
  • 点击 “环境变量”
  • 然后如下图将你的FFmpeg位置添加入环境变量中;并保存。

到此软件即可正式开始使用。

前置知识

我们先来了解关于视频的概念。

1.1 视频容器

视频文件本身其实是一个容器,里面包括了视频和音频,或者字幕等内容。

下表反映了一些常见的视频容器格式。正常情况下,视频文件的后缀名即为它的容器格式。

  • MP4
  • MKV(可容纳无限视频、音频、图片或字幕轨道于一个mkv文件)
  • WebM (Google推出的适用于web的视频格式)
  • AVI(微软推出的视频格式)
  • Rmvb(闭源格式,已逐渐弃用)
  • wmv(微软推出的一组数位视频编解码格式)

实践

打开Windows PowerShell,或WIN+R键输入cmd;键入以下命令以查看你的FFmpeg支持的视频格式。

ffmpeg -formats

1.2 视频编码

编码即为通过一定协议或规则将一段声音或图像转化成计算机数字文件;解码则相反,它将编码过的媒体文件重新转化成声音或图像。
编码器与解码器即为用来执行编解码的软件。

视频和音频都需要经过编码,才能保存成计算机数字文件。不同的视频编码格式,有不同的压缩率,这将会导致同一段视频的文件大小和清晰度的差异。

下表列出了一些常用的视频编码。

  • H.262
  • H.264
  • H.265

上表的编码格式是版权可免费使用的格式。此外,还有无版权的视频编码格式:

  • VP8
  • VP9
  • AV1

常用的音频编码格式如下:

  • MP3
  • AAC

上面所有这些都是有损的编码格式,编码后会损失一些细节,以换取压缩后较小的文件体积。

键入以下命令以查看你的FFmpeg支持的编码格式。

ffmpeg -codecs

1.3 内置编码器

编码器是实现某种编码格式的库文件。只有安装了某种格式的编码器,才能实现该格式视频/音频的编码和解码。

以下是一些 FFmpeg 内置的视频编码器。

  • libx264:最流行的开源 H.264 编码器
  • NVENC:基于 NVIDIA GPU 的 H.264 编码器
  • libx265:开源的 HEVC 编码器
  • libvpx:谷歌的 VP8 和 VP9 编码器
  • libaom:AV1 编码器

音频编码器如下。

  • libfdk-aac
  • aac

下面的命令可以查看 FFmpeg 已安装的编码器。

ffmpeg -encoders

FFmpeg命令

2.1 命令介绍

FFmpeg 的命令行参数可以分成以下五个部分:

ffmpeg {全局参数} {输入文件参数} -i {输入文件} {输出文件参数} {输出文件}

在命令较长的时候,通过 “\” +换行来获得清晰的命令。

ffmpeg \
{全局参数} \
{输入文件参数} \
-i {输入文件} \
{输出文件参数} \
{输出文件}

示例代码

ffmpeg -i E:\demo.mp4 E:\demo.ts

上面的命令将 E盘下demo.mp4 文件转成 demo.ts 文件。FFmpeg 会自动判别输入文件的编码;输入时并不需要带上视频编码格式。

2.2 常用命令行参数

  • -i:指定输入文件
  • -c:指定编码器
  • -c copy:复制原格式,不重新编码
  • -c:v:指定视频编码器
  • -c:a:指定音频编码器
  • -an:去除音频流
  • -vn: 去除视频流
  • -preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
  • -y:全部选择”yes”,既不经过确认,输出时直接覆盖同名文件。

2.3 用法示例

查看文件信息

使用-i参数查看视频文件的元信息

ffmpeg -i input.mp4 // -hide_banner 将只显示元信息

转换格式

转换编码格式:

将视频文件从一种编码转成另一种编码。

ffmpeg -i {输入文件} -c:v {指定编码器} {输出文件}

转换容器格式

将视频文件从一种容器转到另一种容器。

通过如下示例代码将E盘下demo.mp4 文件转成 demo.ts 文件。

ffmpeg -i E:\demo.mp4 -c copy E:\demo.ts //更改视频格式,但编码格式不变时使用-c copy较快

2.4 码率、分辨率

更改码率:

码率指编码的比特率,改变码率可以用来将视频文件的体积变小。

下面的例子指定码率最小为800K,最大为4000K,缓冲区大小为 2000K。

ffmpeg -i E:\demo.mp4 -minrate 800K -maxrate 4000K -bufsize 2000K E:\demo-1.mp4

更改分辨率:

下面是改变视频分辨率的例子,从 1080p(高清) 转为 360p (低清)。

ffmpeg -i E:\demo.mp4 -vf scale=360:-1 E:\demo-2.mp4

2.5 音频操作

提取音频:

有时我们需要从视频里提取声音并剪切其中一段,用来当铃声。可通过如下示例代码实现:

ffmpeg -i E:\demo.mp4 -vn -c:a copy E:\music.mp3 
//-vn 去除视频 -c:a copy 直接输出音频,不改变其编码

加入音频:

有时,我们需要给视频进行配乐(BGM)。可通过如下示例代码实现:

ffmpeg -i E:\demo.mp3 -i E:\demo.mp4 E:\demo-3.mp4
//将demo.mp3 和 demo.mp4 合成一个文件:demo-3.mp4
默认图片
Marugu Fuyeor
欢迎来到复网 - 教程与解决方案 - Marugu Fuyeor
文章: 95

留下评论