0

如何在 Linux 上使用 FFmpeg 命令进行音频和视频处理

 1 year ago
source link: https://www.51cto.com/article/716218.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
036375a28f094d0d46b12168205331ad3981be.jpg

FFmpeg 是一个著名的命令行媒体处理工具。下面介绍如何在 Linux 上安装和使用它来修改音频和视频文件。

几乎所有处理视频的人都可能听说过 FFmpeg。对于不熟悉的人来说,FFmpeg 是一个免费的开源程序,可以将任何视频格式转换为另一种格式并更改其编解码器。

FFmpeg 支持几乎所有的音频/视频编解码器(H.264、H.265、VP8、VP9、AAC、OPUS 等)、文件格式(MP4、FLV、MKV、TS、WEBM、MP3 等),甚至流协议(HTTP、RTMP、RTSP、HLS 等)。

下面介绍如何在 Linux 上安装和使用 FFmpeg 处理音频和视频文件。

Linux 上的 FFmpeg 安装

FFmpeg 是一个免费的开源工具,可在几乎所有主要 Linux 发行版的默认存储库中使用。如果你想自己编译它,你也可以免费获得它的​​源代码​​。

# Debian
sudo apt install ffmpeg

# Fedora
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf -y install ffmpeg

# RHEL/CentOS
yum install ffmpeg ffmpeg-devel

# Arch Linux
pacman -S ffmpeg

如果安装过程一切顺利,当你使用-version参数时,你应该能够看到 FFmpeg 版本。

ffmpeg -version
515c1be7664a0ad5a73005e1794f7523e38072.png

使用 FFmpeg 获取视频信息

可以使用-i标志查看要使用 FFmpeg 编辑的视频的信息:

ffmpeg -i linuxmi.mp4 -hide_banner

在这里,-hide_banner参数的作用是隐藏不必要的信息。您可以删除此参数并查看输出的差异。

d2f2954311c5df6f010052d418e0918b95da21.png

如您所见,可以获得大量信息,例如示例视频的视频编解码器类型、创建日期、元数据和编码器结构。

将视频或音频文件转换为另一种格式

FFmpeg 最有用的功能之一是它可以将视频或音频转换为另一种格式。你可以用简单的单行来做到这一点。

使用 FFmpeg MOV 到 MP4

您可以使用以下命令使用 FFmpeg 将您的 MOV 格式视频文件转换为 MP4:

ffmpeg -i linuxmi.mov output-linuxmi.mp4
b376966789066c6060e29646e769b20779ef18.png

首先,使用-i参数,它代表输入视频。然后,输入要转换的文件。最后,输入要转换的格式。你可以给你的输出任何你想要的名字。

当 FFmpeg 运行时,它会在命令屏幕上显示它所做的更改。您的输出文件将存储在您当前的工作目录中。

使用 FFmpeg 把 WAV 转换到 MP3

与视频类似,您可以对音频文件进行相同的转换。例如,您可以将 WAV 音频文件转换为 MP3,如下所示:

ffmpeg -i linuxmi.wav -vn -ar 48000 -ac 2 -b:a 256 output-linuxmi.mp3

该命令的参数比视频转换方法要多,但也不难理解。要解释这些:

  • vn:有时你听的音频文件有图片。这些图像通常来自视频。如果您不希望在输出中出现此类图像,则可以使用此参数。
  • ar:此参数允许您设置要转换的音频文件的音频频率。您可以使用 8kHz、44.1kHz 或 48kHz 等值调整音质和频率。
  • ac:您之前可能听说过单声道和立体声这两个术语。此参数可以帮助您设置音频通道的数量。
  • b:a:此参数允许您设置每秒的音频比特率。千位越高,音质越高。

使用 FFmpeg 进行音频操作

FFmpeg 还可以将音频与视频分开。为此,使用-vn参数就足够了:

ffmpeg -i linuxmi.mp4 -vn output.mp3

如果您设法将音频与视频分开,您现在可以尝试从视频中删除音频。这里的区别在于-an参数。如果要禁用视频中的任何声音,则应牢记此参数:

ffmpeg -i example-video.mp4 -an output-mute.mp4

使用 FFmpeg 处理视频大小

视频大小有时会很烦人,尤其是当您想将它们上传到某个地方时。您不再需要下载程序来修剪它们,因为 FFmpeg 可以为您做到这一点。但是,您需要了解一些参数:

  • -ss:使用此参数设置剪辑的开始时间
  • -to:允许您指定剪辑的结束时间
  • -c:使用此参数设置剪辑的编解码器
  • -t:使用此参数设置剪辑的持续时间

您可以使用这些参数导出许多示例。例如,如果你想修剪视频,你可以使用类似的东西:

ffmpeg -i example-video.mp4 -ss 00:02:25 -to 00:03:50 -c copy output-trim.mp4

也可以只裁剪视频内的图像而不是整个视频。为此,您可以使用以下方法:

ffmpeg -i example-video.mp4 -filter:v "crop=w:h:x:y" output-crop.mp4

以下是上述命令中使用的参数:

  • -filter:v:此参数指定您将应用于视频的过滤过程
  • crop:此参数用于指定将执行裁剪操作
  • w:h:x:y:您可能已经猜到了,w、h、x 和 y 变量分别表示裁剪框的宽度、高度和位置

使用 FFmpeg 在 Linux 上编辑视频

编辑视频并不仅仅是修剪和剪切。有时您还需要更改视频的比例。以下命令会将视频大小调整为您想要的大小:

ffmpeg -i example-video.mp4 -vf scale=1920:1080 output-scale.mp4
  • -vf:此参数的作用与上面看到的-filter:v参数相同
  • scale:您可以使用此参数在输出中指定所需的比例大小

FFmpeg 还允许您组合多个视频。想象一下,您有多个使用相同编解码器编码的剪辑。输入要合并到.txt文件中的视频列表。然后,运行以下命令:

ffmpeg -f concat -i my-video-list.txt -c copy sum-output.mp4

此处的concat参数组合了您的文件。也可以使用 FFmpeg 旋转视频:

ffmpeg -i linuxmi.mp4 -vf "transpose=2" output-rotate.mp4
  • transpose=0:垂直翻转(默认)
  • transpose=1: 顺时针旋转 90 度
  • transpose=2: 逆时针旋转 90 度
  • transpose=3: 垂直翻转
33b30fc13bb5484a6702240bd7f693e9917d55.png

要将视频顺时针旋转 180 度,您需要指定 transpose 参数两次:

ffmpeg -i example-video.mp4 -vf "transpose=2,transpose=2" output-rotate.mp4

FPS 和 GOP 操作

如您所知,FPS 表示每秒帧数。GOP(图片组)是两个关键帧之间的距离。FFmpeg 也可用于更改一些参数,包括 FPS 和 GOP。如果您使用以下命令,FFmpeg 会将原始 FPS 更改为您设置的值:

ffmpeg -i example-video.mp4 -vf "fps=60" output-fps.mp4

对于 GOP,您可以使用-g参数并将其值设置为您想要的任何值。请注意,强制使用过多的关键帧可能对某些编码器的前向算法有害。

ffmpeg -i example-video.mp4 -g 200 output-gop.mp4

使用 FFmpeg 创建动画 GIF

FFmpeg 也是将视频转换为动画 GIF 的理想选择。您可以使用简单的转换命令来执行此操作:

ffmpeg -i linuxmi.mp4 output-gif.gif
065dbb934b7435ba2d8043e9a59e3da835e821.png

但有时,您可能想要自定义 GIF。您可以使用上面讨论的各种参数来实现此目的:

ffmpeg -ss 00:01:15 -i example-video.mp4 -to 10 -r 10 -vf scale=250:-1 output-gif.gif

这里的-r参数表示帧率。如您所见,在单行命令中可以进行许多不同的自定义。

使用 FFmpeg 从视频中提取帧

除了将一张或多张图像转换为视频外,您还可以从视频中提取帧。以下命令将从您的输入视频中每秒提取一帧。此外,这些提取的图像将具有两位数的名称,例如01.jpeg、02.jpeg等。如果您愿意,还可以添加您学到的其他参数。

ffmpeg -i linuxmi.mp4 -r 1 image-%02d.jpeg
37ae96f6343e0ed879191817b89e8446f11b73.png

您还可以对提取的图像使用其他格式,例如 PNG 和 BMP。

为什么要在 Linux 上使用 FFmpeg?

如您所见,FFmpeg 在很多方面都非常有优势。您不需要为此具备任何技术知识或专业 Linux 经验。只需几个参数,您就可以执行各种媒体处理功能。此外,FFmpeg 即使在低端设备上也能很好地工作。

此外,FFmpeg 的功能不限于以上。当您阅读文档和用户手册时,您可以看到该软件实际上是多么强大。即使使用–help参数和man命令,您也可以获得有关使用 FFmpeg 的更多详细信息。当然还有其他伟大的 Linux 转换器可以与 FFmpeg 相媲美。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK