云网牛站
所在位置:首页 > Linux命令 > 初学者学习FFmpeg命令的教程

初学者学习FFmpeg命令的教程

2019-05-23 11:46:31作者:王明著稿源:云网牛站

在本教程中,我已经为初学者编译了最常用且经常使用的FFmpeg命令,我将解释如何使用FFmpeg多媒体框架通过示例进行各种音频、视频转码和转换操作。如果尚未在Linux系统中安装FFmpeg,请参考在Fedora 29系统中安装FFmpeg的方法

 

FFmpeg命令基本语法

FFmpeg命令的基本语法是:

ffmpeg [global_options] {[input_file_options] -i input_url} ...

 {[output_file_options] output_url} ...

参考:在Linux中安装和使用ffmpeg的方法(以Ubuntu 18.04系统为例)

 

初学者学习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

样本输出:

初学者学习FFmpeg命令的教程

现在,它仅显示媒体文件详细信息。

2.将视频文件转换为不同的格式

FFmpeg是强大的音频和视频转换器,因此可以在不同格式之间转换媒体文件,比如说,要将mp4文件转换为avi文件,请运行:

$ ffmpeg -i video.mp4 video.avi

知识扩展:在Linux系统中将mp4转换为mp3的方法

同样,可以将媒体文件转换为你选择的任何格式。

例如,要将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 Hz。

-ac - 设置音频通道数。

-ab - 表示音频比特率。

-f - 输出文件格式,在我们的例子中,它是mp3格式。

4.更改视频文件的分辨率

如果要为视频文件设置特定分辨率,可以使用以下命令:

$ 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

上面的命令会将给定视频文件的分辨率设置为1280×720。

同样,要将上述文件转换为640×480大小,请运行:

$ 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

此技巧将帮助你将视频文件扩展到较小的显示设备,如平板电脑和手机。

5.压缩视频文件

将媒体文件大小减小到较小的大小总是一个好主意,以节省硬盘的空间。

以下命令将压缩和减小输出文件的大小。

$ ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4

请注意,如果尝试缩小视频文件大小,则会失去质量,如果24过于激进,可以将该crf值降低到23或更低。

还可以将音频转码一点,并通过包含以下选项使立体声减小尺寸:

-ac 2 -c:a aac -strict -2 -b:a 128k

6.压缩音频文件

就像压缩视频文件一样,也可以使用-ab标志压缩音频文件,以节省一些磁盘空间。

我们假设有一个320 kbps比特率的音频文件,想通过将比特率更改为任何较低的值来压缩它,如下所示:

$ ffmpeg -i input.mp3 -ab 128 output.mp3

各种可用音频比特率如下:

96kbps

112kbps

128kbps

160kbps

192kbps

256kbps

320kbps

7.从视频文件中删除音频流

如果不想播放视频文件中的音频,请使用-an参数:

$ ffmpeg -i input.mp4 -an output.mp4

这里,an表示没有录音。

上面的命令将撤消所有音频相关的选项,因为我们没有来自input.mp4的音频。

8.从媒体文件中删除视频流

同样,如果不想要视频流,可以使用“vn”轻松地将其从媒体文件中删除,vn代表没有视频录制,换句话说,此命令将给定的媒体文件转换为音频文件。

以下命令将从给定的媒体文件中删除视频:

$ ffmpeg -i input.mp4 -vn output.mp3

还可以使用'-ab'提及输出文件的比特率,如以下示例所示:

$ ffmpeg -i input.mp4 -vn -ab 320 output.mp3

9.从视频中提取图像

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开始,依此类推。

10.裁剪视频

FFMpeg允许在我们选择的任何维度中裁剪给定的媒体文件。

裁剪视频的语法如下:

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

注:

input.mp4 - 源视频文件。

-filter:v - 表示视频过滤器。

crop - 表示裁剪滤镜。

w - 我们要从源视频中裁剪的矩形的宽度。

h - 矩形的高度。

x – x coordinate - 我们想要从源视频裁剪的矩形。

y - 矩形的y坐标。

让我们假设你想要一个宽度为640像素,高度为480像素的视频,从位置(200,150),命令将是:

$ ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4

请注意,裁剪视频会影响质量,除非有必要,否则不要这样做。

11.转换视频的特定部分

有时可能只想将视频文件的特定部分转换为不同的格式,比如说,以下命令会将给定video.mp4文件的前50秒转换为video.avi格式:

$ ffmpeg -i input.mp4 -t 10 output.avi

在这里,我们以秒为单位指定时间,此外,可以以hh.mm.ss格式指定时间。

12.将宽高比设置为视频

可以使用-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

13.将海报图像添加到音频文件

可以将海报图像添加到文件中,以便在播放音频文件时显示图像,这对于在视频托管或共享网站中托管音频文件非常有用:

$ ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4

14.使用开始和停止时间修剪媒体文件

要使用开始和停止时间将视频剪裁为较小的剪辑,我们可以使用以下命令:

$ ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4

注:

-s - 表示视频剪辑的开始时间,在我们的例子中,开始时间是第50秒。

-t - 表示总持续时间。

当想要使用开始和结束时间从音频或视频文件中剪切部分时,这非常有用。

同样,我们可以像下面那样修剪音频文件:

$ ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3

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显示下一部分视频的开始时间戳,这意味着第二部分将从第30秒开始,并将一直持续到原始视频文件的末尾。

16.将多个视频部分合并或合并为一个

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”的文件中。

17.在视频文件中添加字幕

我们还可以使用FFmpeg为视频文件添加字幕,为你的视频下载正确的字幕,并将其添加到你的视频中,如下所示:

$ fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4

18.预览或测试视频或音频文件

你可能希望预览以验证或测试输出文件是否已正确转码,为此,可以使用命令从终端播放它:

$ ffplay video.mp4

初学者学习FFmpeg命令的教程

同样,可以测试音频文件,如下所示:

$ ffplay audio.mp3

初学者学习FFmpeg命令的教程

19.增加/减少视频播放速度

FFmpeg允许调整视频播放速度。

要提高视频播放速度,请运行:

$ ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4

该命令将使视频的速度加倍。

要减慢视频速度,需要使用大于1的乘数,要降低播放速度,请运行:

$ ffmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4

20.创建动画GIF

使用FFmpeg,我们可以轻松快速地创建动画视频文件,参考在Ubuntu 16.04中创建GIF动图一文。

 

总结

在本教程中,我介绍了最常用的FFmpeg命令,这对初学者掌握FFmpeg命令非常有帮助。同时它有很多不同的选项来执行各种高级功能,要了解有关它的更多信息,请运行man ffmpeg命令(即:$ man ffmpeg)-查看FFmpeg帮助信息。

 

相关主题

Ubuntu编译ffmpeg实现GPU转码

Linux命令子频道
精选文章
热门文章