关于python:实战详细讲解ffmpeg命令的使用来自一线的经验视频合并avi转MP4补空白音频收藏下来一定用的到

11次阅读

共计 6482 个字符,预计需要花费 17 分钟才能阅读完成。

您好,我是码农飞哥,感谢您浏览本文,欢送一键三连哦
本文从实战的角度登程具体解说 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 的官网文档

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

正文完
 0