在本教程中,我已经为初学者编译了最常用且经常使用的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 样本输出:
现在,它仅显示媒体文件详细信息。 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
同样,可以测试音频文件,如下所示: $ ffplay audio.mp3
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帮助信息。
相关主题 |