您好,我是码农飞哥,感谢您浏览本文,欢送一键三连哦
本文从实战的角度登程具体解说ffmpeg命令的应用。
干货满满,倡议珍藏,须要用到时常看看。 小伙伴们如有问题及须要,欢送踊跃留言哦~ ~ ~。

前言

ffmpeg的介绍以及装置

ffmpeg是一个十分疾速的视频和音频转换器,也能够从实时音频/视频源中抓取。它还能够在任意采样率之间进行转换,并应用高质量的多相滤波器动静调整视频大小。他可能兼容Windows,Linux以及mac三种操作系统(说白了就是这三种操作系统都能用)。
ffmpeg的下载地址是:ffmpeg的下载地址
装置过程没啥好说的,依照提醒始终点下一步就行了。这里须要阐明的一点是ffmpeg装置好之后最好在PATH中配置ffmpeg的环境变量。配置好之后在命令行中输出ffmpeg会呈现如下后果:

基本概念阐明

比特率:指的是每秒传送的比特(bit)数,单位是bps。
帧速率:指的是每秒刷新的图片的帧数,也能够了解为图形处理器每秒钟可能刷新几次。单位是fps(Frames per Second)或者"赫兹(Hz)"。

ffmpeg命令应用的通用格局

ffmpeg命令应用的通用格局如下所示:

ffmpeg [ global_options ] {[ input_file_options ] -i 输出文件地址} ... {[ output_file_options ] 输入文件地址} ...

ffmpeg :示意调用ffmpeg程序的命令,如果没有配置环境变量的话则须要指定ffmpeg.exe的绝对路径,就像上面这样D:\\develop\\ffmpeg-4.3.2-2021-02-20-full_build\\bin\\ffmpeg.exe
global_options:用于指定全局操作参数,比方 -y 参数,可选的参数。
input_file_options:用于指定输出文件的操作参数,比方:-f concat 参数等
-i: 指定输出文件的地址,必要参数。
output_file_options: 用于指定输入文件的操作参数,可选参数。

ffmpeg一些常用命令参数

要想纯熟的应用ffmpeg命令,就须要把握ffmpeg的一些常用命令参数。

通用选项

通用选项就是指对音频视频都应用的命令参数。

参数作用作用范畴示例
-f强制输出或输入文件格式,通常会自动检测输出文件的格局,并依据输入文件的文件扩展名猜想格局,因而在大多数状况下不须要此选项全局
-i 地址输出文件的地址输出
-y笼罩输入文件,即当output.mp4存在时,不经提醒笼罩该文件全局
-i指定输出文件的地址,如果跟ffmpeg则能够写 xxx.mp4,否则则须要写全门路输出
-n不要笼罩输入文件,即如果指定的输入文件曾经存在,则立刻退出全局
-stream_loop编号设置输出流应循环的次数。循环 0 示意不循环,循环 -1 示意有限循环。输出
-c[: stream_specifier ]编解码器输出/输入,每个流-c copy (就是依照输出流的编码称说输入流)
-codec[: stream_specifier ]编解码器,为一个或多个流抉择编码器(在输入文件之前应用时)或者解码器(在输出文件之前应用时)输出/输入,每个流ffmpeg -i 输出 -map 0 -c:v libx264 -c:a 复制输入 (应用 libx264 编码所有视频流并复制所有音频流。)
-t持续时间输出/输入,当用作输出选项时,限度从输出文件读取数据的持续时间。当用作输入选项时(在输入url之前),在其持续时间达到duration后进行写入输入。duration必须是持续时间-t 20 (继续20秒)
-fs limit_size是指文件大小限度,以字节为单位。超出限度后不会再写入更多的字节块。输入文件的大小略大于申请的文件大小。输入
-ss地位当用作输出选项时,在输出文件中寻找地位,多用于视频剪切输出/输入-ss 15 (从第15秒开始)
-ss地位当用作输出选项时,在输出文件中寻找地位,多用于视频剪切输出/输入-ss 15 (从第15秒开始)
-dn作为输出选项,阻止文件的所有数据流被过滤或主动抉择或映射用于任何输入输出/输入-ss 15 (从第15秒开始)
-frames[: stream_specifier ]帧数即是生成指定帧数的视频输入
-filter[: stream_specifier ] filtergraph ( output,per-stream )创立由filtergraph指定的filtergraph并应用它来过滤流,filtergraph是对应用于流的 filtergraph 的形容,并且必须具备雷同类型的流的单个输出和单个输入。输入

视频选项

视频选项,指的是只作用于视频的命令参数。

参数作用作用范畴示例
-vframes数设置要输入的视频帧数
-r fps设置帧率(HZ值、分数或缩写),作为输出选项,会疏忽视频文件的视频时长,而是假如恒定帧速率fps生成工夫戳。作为输入选项,复制或删除输出帧以实现恒定的输入帧速率fps。输出/输入-r 30 (30帧/秒)
-s 大小设置帧大小,格局为'宽高'输出/输入,每个流
-vn作为输出选项,阻止文件的所有视频流被过滤或主动抉择或映射到任何输入,作为输入选项,即主动抉择或映射任何视频流,可用于从视频中提取音频输出/输入

音频选项

音频选项,指的是只作用于音频的命令参数。

参数作用作用范畴示例
-aframes编号设置要输入的音频帧数输入
-ar 频率设置音频采样频率,对于输入流,它默认设置为相应输出流的频率。对于输出流,此选项仅对音频抓取设施和原始解复用器有意义输出/输入-ar 24000 (以24000Hz采集音频)
-aq q设置音频品质(只作用于编解码器,VBR)输入
-ac 通道设置音频通道数。对于输入流,它默认设置为输出音频通道的数量输出/输入,每个流-ac 2 (声道数设置为2)
-an作为输出选项,阻止文件的所有音频流被过滤或主动抉择或映射到任何输入,作为输入选项,禁用音频记录,即任何音频流的主动抉择或映射输出/输入
-acodec编解码器设置音频编解码器输出/输入-acodec aac (音频编码用aac)
-vol 百分比设置百分之多少的音量输出/输入-vol 150(150%的音量)
-map file:stream设置输出/输入流映射输出/输入

ffmpeg的实战

说完了ffmpeg的命令参数,接着就让咱们来实战一下。示例中的所有视频和音频都放在了D:\\ffmpeg_test目录下。

1.webm转mp4的命令

webm格局的视频是所有浏览器反对的视频格式,前端在录制好视频之后传入给后端一个webm格局的视频,通常咱们须要将webm格局的视频转成mp4格局的视频。

ffmpeg -y -i  D:\\ffmpeg_test\\1.webm  -r 30  D:\\ffmpeg_test\\1.mp4

这里就是将1.webm的视频转成每秒30帧的视频1.mp4。这里指定1.mp4的绝对路径,如果不指定的话则生成的视频文件会落到以后ffmpeg命令的执行目录下。 运行后果是:

2. 视频合并命令

当上传的视频比拟大时或者用户分段录制视频时,前端会传入多段视频给后端,这时候就须要进行视频的合并操作。应用ffmpeg命令进行视频合并操作分为两步。

  1. 首先新建一个名为filelist.txt 的文件,在该文件中将须要合并的视频地址写入该文件。比方D:\ ffmpeg_test目录下有 1.mp4和2.mp4须要合并。则写入的格局如下:
  2. 执行视频合并的ffmpeg的命令:
ffmpeg -f concat -safe 0 -y -i D:\\ffmpeg_test\\filelist.txt -c copy -strict -2 D:\\ffmpeg_test\\concated.mp4

命令的解释:这里就是将后面的filelist.txt记录的1.mp4和2.mp4两个视频合并成一个名为concated.mp4的视频。
-f concat:指定该操作是合并操作
-safe 0:用于防止操作输出流的权限问题
-c copy:用于指定输入视频流和输出视频流的编码格局保持一致
-strict -2: 用于防止opus in MP4 support is experimental这个问题。
具体能够参考应用ffmpeg进行视频合并时几个问题记录 Operation not permitted
运行后果是:

3. 视频剪切

原始视频弄好之后,用户可能对视频不太称心,须要将不好的视频片段剪切掉。其操作命令也很简略。
这就就是将原始视频concated.mp4从第15秒开始剪切,剪切成一个25秒的新视频clip.mp4。

ffmpeg -ss 15 -t 25 -i D:\\ffmpeg_test\\concated.mp4  -c:v libx264 -c:a aac -strict experimental D:\\ffmpeg_test\\clip.mp4

参数介绍:
-ss 15 :从第15秒开始剪切视频。
-t 25 :指定剪切后的视频时长为25秒。
-c:v libx264: 指定视频的编码格局为libx264格局。
-c:a aac :指定音频的编码格局为aac格局。
-strict experimental :平安解决。
运行后果是:

4. 提取音频

当初用户称心的视频剪切好了,用户能够进入配音环节了。在进行配音之前咱们首先须要将原视频的音频从原视频中分离出来。提取音频的操作比较简单。其命令是:

ffmpeg -y -i D:\\ffmpeg_test\\concated.mp4 -vn D:\\ffmpeg_test\\output.wav

这里就是从concated.mp4视频中提测其原音频,原音频的名字是output.wav。这里 -vn 指定了输入音频的编码格局跟视频的音频格式保持一致。运行后果是:

5. 音量调整

原视频的音频分离出来之后,用户能够一边播放原音频,一边录制配音了。这时候用户可能须要想调整音频的音量。调整音量的操作也很简略。
上面就是将音频的音量调整为原来的80%。

ffmpeg -y -i D:\\ffmpeg_test\\output.wav -af "volume=0.8" D:\\ffmpeg_test\\output_80.wav或者ffmpeg -y -i D:\\ffmpeg_test\\output.wav -vol 80 D:\\ffmpeg_test\\output_80.wav

这里须要留神的是如果是第一种形式的话-af "volume=数值" volume的数值必须是除以100之后的值。而-vol 数值 数值间接传入百分比。
运行后果是:

6. 音频同轨

配音配好之后,咱们想着将原音频和配音音频合并成一条音频,这里就须要进行音频同轨了。其命令是:

ffmpeg -y -i D:\\ffmpeg_test\\org_video_sound_input.wav -i D:\\ffmpeg_test\\org_voice_input.wav -filter_complex amix=inputs=2:duration=longest D:\\ffmpeg_test\\org_voice_output.wav

这里就是将音频org_video_sound_input.wav和org_voice_input.wav音频合并成一条音频org_voice_output.wav。其外围的命令参数是:
-filter_complex amix=inputs=2:duration=longest: 这里应用-filter_complex指定简单的过滤器图,amix=inputs=2:duration=longest采纳amix过滤器指定输出音频的数量是2个,时长取最长的那个音频的时长。运行后果是:

7. 配音音频补空白音频

配音配好之后,然而个别状况下配音音频的时长不等于原音频的时长。这时候就须要将没有配音的时长补空白音频。补空白音频的操作略微有点简单。其操作思路分为三步。

  1. 生成一个跟原音频时长一样的空白音频,其命令是:
    这里假如原音频的时长是20秒,所以就生成一个时长为20秒的空白音频。

    ffmpeg -y -f lavfi -i anullsrc -t 20 D:\\ffmpeg_test\\silence.wav
  2. 将配音音频结尾局部补空白音频(比方用户是从原音频的第2秒处还是配音,那么配音音频的前2秒就须要补空白音频),其命令是:
ffmpeg -y -i D:\\ffmpeg_test\\silence.wav -i D:\\ffmpeg_test\\org_voice_input.wav  -filter_complex "aevalsrc=0:d=2 [s1];[s1][1:a]concat=n=2:v=0:a=1[aout]" -c:v copy -map [aout]  D:\\ffmpeg_test\\org_voice_output_silence.wav

其中:D:\ffmpeg_test\silence.wav 是第一步生成的空白音频,D:\ffmpeg_test\org_voice_input.wav 是用户配音的音频。
d=2 :用于指定是补空白的点,就将0秒到2秒这段时长补空白。
-c:v copy:音频的编码格局不变。

  1. 将补完空白音频的配音音频跟第一步生成的空白音频同轨就失去了一个和原音频时长一样的配音音频。其命令是同第后面的第6节,在此就不在赘述了。

    ffmpeg -y -i D:\\ffmpeg_test\\org_voice_output_silence.wav -i D:\\ffmpeg_test\\silence.wav -filter_complex amix=inputs=2:duration=longest D:\\ffmpeg_test\\org_voice_output_result.wav

    运行后果是:

    8. 给视频增加声音(视频和音频联合)

    视频和音频的联合,就是将后面生成的带配音的音频和原视频联合。其命令是:

ffmpeg  -y -i D:\\ffmpeg_test\\user_video.avi  -i D:\\ffmpeg_test\\org_voice_output_result.wav -c:v copy -c:a aac -strict experimental D:\\ffmpeg_test\\user_video_target.avi

输出视频是:user_video.mp4,输出音频是:org_voice_output_result.wav。输入视频是:org_voice_output_result.avi
-c:v copy: 指定输入视频的格局和输出视频的格局保持一致。
-c:a aac : 指定输入视频的音频编码格局是aac格局。
运行后果是:

9. avi转mp4

有点遗憾的是生成的avi格局的视频不能在浏览器上间接播放。所以,咱们须要将avi格局的视频转成mp4格局的视频。其转换命令是:

ffmpeg -y -i D:\\ffmpeg_test\\user_video_target.avi -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 192k -ac 2 D:\\ffmpeg_test\\user_video_target.mp4

这里输出视频是:user_video_target.avi,输入视频是:user_video_target.mp4。
-c:v libx264 :指定视频的编码格局是libx264格局。
-c:a aac :指定音频的编码格局是aac格局。
-b:a 192k :指定输入视频的比特率是192kbits。
运行后果是:

总结

本文从实战的角度登程具体介绍了ffmpeg的应用。置信对读者敌人们肯定大有帮忙。

参考

ffmpeg 常用命令总结:(avi转MP4、MP4转ts、视频压缩、去除视频声音、合并音频和视频)
ffmpeg的官网文档

我是码农飞哥,再次感谢您读完本文
全网同名【码农飞哥】。不积跬步,无以至千里,享受分享的高兴
我是码农飞哥,再次感谢您读完本文