在本指南中,我将通过示例说明如何使用 FFmpeg 多媒体框架进行各种音频、视频转码和转换操作。 我为初学者编译了最常用和最常用的 20 多个 FFmpeg 命令。
我将通过不时添加更多示例来不断更新本指南。 请将本指南添加为书签,稍后再回来查看更新。 让我们开始吧,好吗?
在 Linux 中安装 FFmpeg
如果您尚未在 Linux 系统中安装 FFmpeg,请参阅以下指南。
- 在 Linux 中安装 FFmpeg
带有示例的 FFmpeg 命令
FFmpeg 命令的典型语法是:
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
我们现在将看到一些重要且有用的 FFmpeg 命令。
1.获取音视频文件信息
要显示媒体文件的详细信息,请运行:
$ ffmpeg -i video.mp4
样本输出:
ffmpeg version n4.1.3 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.2.1 (GCC) 20181127 configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3 libavutil 56. 22.100 / 56. 22.100 libavcodec 58. 35.100 / 58. 35.100 libavformat 58. 20.100 / 58. 20.100 libavdevice 58. 5.100 / 58. 5.100 libavfilter 7. 40.101 / 7. 40.101 libswscale 5. 3.100 / 5. 3.100 libswresample 3. 3.100 / 3. 3.100 libpostproc 55. 3.100 / 55. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.20.100 Duration: 00:00:28.79, start: 0.000000, bitrate: 454 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m), 1920x1080 [SAR 1:1 DAR 16:9], 318 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) Metadata: handler_name : ISO Media file produced by Google Inc. Created on: 04/08/2019. Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default) Metadata: handler_name : ISO Media file produced by Google Inc. Created on: 04/08/2019. At least one output file must be specified
正如您在上面的输出中看到的,FFmpeg 显示媒体文件信息以及 FFmpeg 详细信息,例如版本、配置详细信息、版权声明、构建和库选项等。
如果您不想看到 FFmpeg 横幅和其他详细信息,而只想看到媒体文件信息,请使用 -hide_banner
像下面这样的标志。
$ ffmpeg -i video.mp4 -hide_banner
样本输出:
看? 现在,它只显示媒体文件的详细信息。
建议阅读:
- 使用 MediaInfo 在 Linux 上显示媒体文件信息
2. 将视频文件转换为不同的格式
由于 FFmpeg 是一个功能丰富且功能强大的音视频转换器,因此可以在不同格式之间转换媒体文件。 说为 example, 转换 mp4
文件到 avi
文件, 跑:
$ ffmpeg -i video.mp4 video.avi
同样,您可以将媒体文件转换为您选择的任何格式。
为了 example, 转换 YouTube flv
将视频格式化为 mpeg
格式化,运行:
$ ffmpeg -i video.flv video.mpeg
如果要保留源视频文件的质量,请使用 '-qscale 0'
范围:
$ ffmpeg -i input.webm -qscale 0 output.mp4
要检查 FFmpeg 支持的格式列表,请运行:
$ ffmpeg -formats
3. 将视频文件转换为音频文件
要将视频文件转换为音频文件,只需将输出格式指定为 .mp3
, 或者 .ogg
,或任何其他音频格式。
上面的命令将转换 input.mp4
视频文件到 output.mp3
音频文件。
$ ffmpeg -i input.mp4 -vn output.mp3
此外,您可以对输出文件使用各种音频转码选项,如下所示。
$ ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3
这里,
-vn
– 表示我们已禁用输出文件中的视频录制。-ar
– 设置输出文件的音频频率。 常用的值是22050
,44100
,48000
赫兹。-ac
– 设置音频通道数。-ab
– 指示音频比特率。-f
– 输出文件格式。 在我们的例子中,它是mp3
格式。
上面的命令将显示如下警告消息。
[libmp3lame @ 0x5589ed539240] Bitrate 320 is extremely low, maybe you mean 320k The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
这是因为我们已经给 320
比特/秒作为比特率,非常低。 这将创建一个较小的输出文件。 为了获得最佳质量输出,请使用比特率值作为 320k
而不仅仅是 320
.
4.改变音频文件的音量
FFmpeg 允许我们使用改变音频文件的音量 "volume filter"
选项。
为了 example,以下命令将音量减半。
$ ffmpeg -i input.mp3 -af 'volume=0.5' output.mp3
同样,我们可以像下面这样增加音量:
$ ffmpeg -i input.mp3 -af 'volume=1.5' output.mp3
5.更改视频文件的分辨率
如果要为视频文件设置特定的分辨率,可以使用以下命令:
$ ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4
或者,
$ ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4
上述命令将给定视频文件的分辨率设置为 1280x720
.
同样,将上述文件转换为 640x480
大小,运行:
$ ffmpeg -i input.mp4 -filter:v scale=640:480 -c:a copy output.mp4
或者,
$ ffmpeg -i input.mp4 -s 640x480 -c:a copy output.mp4
这个技巧将帮助您将视频文件缩放到较小的显示设备,例如平板电脑和手机。
6.压缩视频文件
将媒体文件的大小减小到更小的大小以节省磁盘空间总是一个好主意。
以下命令将压缩并减小输出文件的大小。
$ ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4
请注意,如果您尝试减小视频文件大小,您将失去质量。 你可以降低它 crf
值 23
或更低,如果 24
太激进了。
您还可以通过包含以下选项对音频进行一点转码并使其成为立体声以减小大小。
-ac 2 -c:a aac -strict -2 -b:a 128k
7. 压缩音频文件
就像压缩视频文件一样,您也可以使用压缩音频文件 -ab
标志以节省一些磁盘空间。
假设您有一个音频文件 320
kbps 比特率。 您想通过将比特率更改为任何较低的值来压缩它,如下所示。
$ ffmpeg -i input.mp3 -ab 128 output.mp3
各种可用音频比特率的列表是:
- 96kbps
- 112kbps
- 128kbps
- 160kbps
- 192kbps
- 256kbps
- 320kbps
8.从视频文件中删除音频流
如果您不想要视频文件中的音频,请使用 -一个 旗帜。
$ ffmpeg -i input.mp4 -an output.mp4
这里, 'an'
表示没有录音。 换句话说,此选项将使音频静音。
上述命令将撤消所有与音频相关的标志。
9.从媒体文件中删除视频流
同样,如果您不想要视频流,您可以使用轻松将其从媒体文件中删除 'vn'
旗帜。 vn 代表不录像。 换句话说,此命令将给定的媒体文件转换为音频文件。
以下命令将从给定的媒体文件中删除视频。
$ ffmpeg -i input.mp4 -vn output.mp3
您还可以使用提及输出文件的比特率 '-ab'
标志如下图 example.
$ ffmpeg -i input.mp4 -vn -ab 320 output.mp3
10. 从视频中提取图像
FFmpeg 的另一个有用功能是我们可以轻松地从视频文件中提取图像。 如果您想从视频文件创建相册,这可能非常有用。
要从视频文件中提取图像,请使用以下命令:
$ ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png
这里,
-r
– 设置帧速率。 即每秒要提取成图像的帧数。 默认值为25
.-f
– 在我们的例子中表示输出格式,即图像格式。image-%2d.png
– 指示我们要如何命名提取的图像。 在这种情况下,名称应该像image-01.png
,image-02.png
,image-03.png
等等。 如果你使用%3d
,然后图像的名称将像image-001.png
,image-002.png
等等。
11. 裁剪视频
FFMpeg 允许以我们选择的任何维度裁剪给定的媒体文件。
裁剪视频文件的语法如下:
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4
这里,
input.mp4
– 源视频文件。-filter:v
– 表示视频过滤器。crop
– 表示裁剪过滤器。w
– 我们要从源视频中裁剪的矩形的宽度。h
– 矩形的高度。x
– X 我们要从源视频中裁剪的矩形的坐标。y
– 矩形的 y 坐标。
假设您想要一个带有 宽度 640
像素 和一个 高度 480
像素, 来自 位置 (200,150
),命令将是:
$ ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4
请注意,裁剪视频会影响质量。 除非必要,否则不要这样做。
12.转换视频的特定部分
有时,您可能只想将视频文件的特定部分(持续时间)转换为不同的格式。 说为 example,以下命令将转换 第一的 10
秒 将给定的 video.mp4 文件转换为 video.avi 格式。
$ ffmpeg -i input.mp4 -t 10 output.avi
在这里,我们以秒为单位指定时间。 此外,还可以指定时间 hh.mm.ss
格式。
13.设置宽高比为视频
您可以使用以下方法将宽高比设置为视频文件 -aspect
像下面这样的标志。
$ ffmpeg -i input.mp4 -aspect 16:9 output.mp4
常用的纵横比有:
- 16:9
- 4:3
- 16:10
- 5:4
- 2:21:1
- 2:35:1
- 2:39:1
14. 将海报图片添加到媒体文件中
您可以将海报图像添加到文件中,以便在播放音频或视频文件时显示图像。 这对于在视频托管或共享网站中托管音频文件可能很有用。
$ ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
15.使用开始和停止时间修剪媒体文件
要使用开始和停止时间将视频修剪为更小的剪辑,我们可以使用以下命令。
$ ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4
这里,
--s
– 指示视频剪辑的开始时间。 在我们的 example,开始时间是第50秒。-t
– 表示总持续时间。
当您想使用开始和结束时间从音频或视频文件中剪切一部分时,这非常有用。
同样,我们可以像下面这样修剪音频文件。
$ ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3
16. 将音频/视频文件拆分成多个部分
有些网站只允许您上传特定大小的视频。 为了 exampleWhatsapp 将只允许 15
秒视频设置为印度用户的状态消息。 在这种情况下,您可以将大型视频文件拆分为多个较小的部分,如下所示。
$ ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4
这里, -t 00:00:30
表示从视频开始到视频第 30 秒创建的部分。 -ss 00:00:30
显示视频下一部分的开始时间戳。 这意味着第 2 部分将从第 30 秒开始,一直持续到原始视频文件的结尾。
Recommended Download - Free Guide: "How to Start Your Own Successful Podcast"
17.将多个音频/视频部分合并或合并为一个
FFmpeg 还将加入多个视频部分并创建一个视频文件。
创造 join.txt
包含要加入的文件的确切路径的文件。 所有文件应该是相同的格式(相同的编解码器)。 所有文件的路径名应该像下面一样一一提到。
file /home/sk/myvideos/part1.mp4 file /home/sk/myvideos/part2.mp4 file /home/sk/myvideos/part3.mp4 file /home/sk/myvideos/part4.mp4
现在,使用命令加入所有文件:
$ ffmpeg -f concat -i join.txt -c copy output.mp4
如果您收到类似以下的错误;
[concat @ 0x555fed174cc0] Unsafe file name '/path/to/mp4' join.txt: Operation not permitted
添加 "-safe 0"
:
$ ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4
上面的命令将加入 part1.mp4
, part2.mp4
, part3.mp4
, 和 part4.mp4
文件到一个名为 "output.mp4"
.
或者,您可以使用以下单行命令来连接目录中的所有文件。 转到您有文件的目录并运行以下命令以加入名为的文件 audio1.mp3
, audio2,mp3
和 audio3.mp3
进入 output.mp3
.
$ ffmpeg -i "concat:audio1.mp3|audio2.mp3|audio3.mp3" -c copy output.mp3
18.为视频文件添加字幕
我们还可以使用 FFmpeg 为视频文件添加字幕。 为您的视频下载正确的字幕并将其添加到您的视频中,如下所示。
$ fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4
19. 预览或测试视频或音频文件
您可能需要预览以验证或测试输出文件是否已正确转码。 为此,您可以使用以下命令从终端播放它:
$ ffplay video.mp4
同样,您可以测试音频文件,如下所示。
$ ffplay audio.mp3

20.增加/减少视频播放速度
FFmpeg 允许您调整视频播放速度。
要提高视频播放速度,请运行:
$ ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
该命令将使视频的速度加倍。
要减慢视频速度,您需要使用乘数 比…更棒 1
. 要降低播放速度,请运行:
$ ffmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4
21.增加/减少音频播放速度
要提高或降低音频播放的速度,请使用 "atempo"
音频过滤器。 以下命令将使音频速度加倍。
$ ffmpeg -i input.mp4 -filter:a "atempo=2.0" -vn output.mp4
您可以使用之间的任何值 0.5
和 2.0
用于音频。
22. 创建动画 GIF
我们出于各种目的在几乎所有社交和专业网络上使用 GIF 图像。 使用 FFmpeg,我们可以轻松快速地创建动画视频文件。
以下指南解释了如何在 Linux 和类 Unix 系统中使用 FFmpeg 和 ImageMagick 创建动画 GIF 文件。
- 如何在 Linux 中创建动画 GIF
建议阅读:
- Gifski – 一个跨平台的高质量 GIF 编码器
23. 从 PDF 文件创建视频
多年来,我收集了许多 PDF 文件,主要是 Linux 教程,并保存在我的平板电脑中。 有时我懒得从平板电脑上阅读它们。
所以,我决定从 PDF 文件创建一个视频,然后在电视或电脑等大屏幕设备上观看。 如果您想知道如何从 PDF 文件集合制作电影文件,以下指南将有所帮助。
- 如何在 Linux 中从 PDF 文件创建视频
24. 旋转视频
如果您有不同方向(纵向或横向)的视频文件,您可以按照以下指南中的说明旋转它们。
- 如何从命令行使用 FFMpeg 旋转视频
25.将视频转换为 WhatsApp 视频格式
WhatsApp 不支持某些视频。 您不能与您的联系人共享它们或将它们设置为 whatsapp 状态。 不用担心! 我们可以轻松转换视频 WhatsApp FFmpeg 支持的视频格式,如以下链接中所述。
- 将视频转换为 WhatsApp 使用 FFmpeg 的视频格式
26.放大和缩小视频
FFmpeg 有很多有用的过滤器来执行特定的任务。 其中之一是缩放。 使用 zoompan 过滤器,我们可以轻松地每隔 X 秒定期放大和缩小。 有关更多详细信息,请参阅以下链接:
- 如何使用 FFmpeg 放大和缩小视频
27. 寻求帮助
在本指南中,我介绍了最常用的 FFmpeg 命令。 它有更多不同的选项来执行各种高级功能。 要了解更多信息,请参阅手册页。
$ man ffmpeg
相关阅读:
- Youtube-dl 初学者示例教程
就这样。 我希望本指南为您提供了足够的 FFmpeg 命令示例来开始使用 FFmpeg。