实战详细讲解ffmpeg命令的使用(来自一线的经验,视频合并&avi转MP4&补空白音频【收藏下来一定用的到】)(ffmpeg使用教程)

网友投稿 2243 2022-05-30

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。

本文从实战的角度出发详细讲解FFmpeg命令的使用。

干货满满,建议,需要用到时常看看。 小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~。

ffmpeg的介绍以及安装

基本概念说明

ffmpeg命令使用的通用格式

ffmpeg一些常用命令参数

通用选项

视频选项

音频选项

ffmpeg的实战

1.webm转mp4的命令

2. 视频合并命令

3. 视频剪切

4. 提取音频

5. 音量调整

6. 音频同轨

7. 配音音频补空白音频

8. 给视频添加声音(视频和音频结合)

9. avi转mp4

总结

参考

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的一些常用命令参数。

通用选项

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

视频选项

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

音频选项

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

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命令进行视频合并操作分为两步。

实战详细讲解ffmpeg命令的使用(来自一线的经验,视频合并&avi转MP4&补空白音频【收藏下来一定用的到】)(ffmpeg使用教程)

首先新建一个名为filelist.txt 的文件,在该文件中将需要合并的视频地址写入该文件。比如D:\ ffmpeg_test目录下有 1.mp4和2.mp4需要合并。则写入的格式如下:

执行视频合并的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. 配音音频补空白音频

配音配好之后,但是一般情况下配音音频的时长不等于原音频的时长。这时候就需要将没有配音的时长补空白音频。补空白音频的操作稍微有点复杂。其操作思路分为三步。

生成一个跟原音频时长一样的空白音频,其命令是:

这里假设原音频的时长是20秒,所以就生成一个时长为20秒的空白音频。

ffmpeg -y -f lavfi -i anullsrc -t 20 D:\\ffmpeg_test\\silence.wav

将配音音频开头部分补空白音频(比如用户是从原音频的第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:音频的编码格式不变。

4. 将补完空白音频的配音音频跟第一步生成的空白音频同轨就得到了一个和原音频时长一样的配音音频。其命令是同第前面的第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的官方文档

我是码农飞哥,再次感谢您读完本文。

视频

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《图解HTTP》读后笔记01
下一篇:快速了解分布式跟踪系统 Zipkin(分布式追踪系统)
相关文章