20+个 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) 20161127 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-libHyman --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
现在,它只显示媒体文件详细信息。
2.将视频文件转换为不同的格式
由于FFMPEG是一种功能丰富和强大的音频和视频转换器,因此可以在不同格式之间转换媒体文件。
例如,将MP4文件转换为AVI文件,运行:
$ffmpeg -i video.mp4 video.avi
同样,我们可以将媒体文件转换为我们选择的任何格式。
例如,要将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视频文件转换为输出.mp3音频文件。
$ffmpeg -i input.mp4 -vn output.mp3
此外,我们可以将各种音频转码选项用于输出文件,如下所示。
$ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3
其中
- -vn - 表示我们在输出文件中已禁用视频录制。
- 设置输出文件的音频频率。使用的常见值为22050,44100,48000Hz。
- -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允许我们使用"卷过滤器"选项更改音频文件的卷。
例如,以下命令将减少一半。
$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
请注意,如果我们尝试降低视频文件大小,请损失质量。
如果24过于激进,我们可以将CRF值降低到23或者更低。
我们还可以将音频丢失一点并使其立体声立体声通过包括以下选项来减小大小。
-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.从视频文件中删除音频流
如果我们不希望来自视频文件的音频,请使用-an标志。
$ffmpeg -i input.mp4 -an output.mp4
其中'AN'表示没有音频录制。
换句话说,此选项将静音音频。
上面的命令将撤消所有音频相关标志。
9.从媒体文件中删除视频流
同样,如果我们不想要视频流,我们可以使用"VN"标志轻松地从媒体文件中删除它。
VN代表无视频录制。
换句话说,此命令将给定媒体文件转换为音频文件。
以下命令将从给定媒体文件中删除视频。
$ffmpeg -i input.mp4 -vn output.mp3
我们还可以使用"-AB"标志提及输出文件的比特率,如以下示例所示。
$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 - 表示视频过滤器。
- 裁剪 - 表示裁剪过滤器。
- W - 我们想要从源视频裁剪的矩形的宽度。
- H - 矩形的高度。
- 我们要从源视频中裁剪的矩形X - x坐标。
- y - y坐标的矩形。
让我们假设我们希望宽度为640像素的视频,高度为480像素,从位置(200,150),该命令是:
$ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4
请注意,裁剪视频会影响质量。
除非有必要,否则不要这样做。
12.转换视频的特定部分
有时,我们可能希望仅将视频文件的特定部分(持续时间)转换为不同的格式。
例如,以下命令将给定Video.mp4文件的前10秒转换为Video.avi格式。
$ffmpeg -i input.mp4 -t 10 output.avi
其中我们在几秒钟内指定时间。
此外,可以以hh.mm.ss格式指定时间。
13.将宽高比设置为视频
我们可以使用下面的标志将宽高好处设置为视频文件。
$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.使用start和停止时间修剪媒体文件
要使用开始和停止时间将视频缩小到较小的剪辑,我们可以使用以下命令。
$ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4
其中
- 表示视频剪辑的起始时间。在我们的示例中,开始时间是50秒。
- -t - 表示总持续时间。
当我们希望使用开始和结束时间从音频或者视频文件中切割部分时非常有帮助。
同样,我们可以在下面的音频文件中修剪。
$ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3
16.将音频/视频文件分成多个部分
某些将允许我们仅上传特定的视频大小。
例如,WhatsApp只允许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秒开始,并将继续到原始视频文件的末尾。
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文件到一个名为"outputm.p4"的单个文件中。
或者,我们可以使用以下One-Liner命令加入目录中的所有文件。
转到我们拥有文件的目录并运行以下命令将名为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之间的任何值进行音频。