朝小闇的博客

海上月是天上月,眼前人是心上人

FFmpeg简要使用

1.简介

  • FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序(——来源于百度百科)

2.下载并配置环境

  • 直接百度进入官网下载即可;
  • 下载完成后将解压后的文件夹重命名为ffmpeg,并且放至自己电脑的环境目录下;
  • 前往配置环境目录PATH,连同ffmpeg目录下的bin目录路径一起粘贴到PATH配置下新的路径即可;

3.简要介绍

  • 在bin目录下有三个文件:
    • ffmpeg.exe:用于操作、转换和流式传输多媒体内容;
    • ffplay.exe:是一个简洁的视频音频播放器;
    • ffprobe.exe:是一个媒体参数分析工具;

image-20200914203342793

4.简要使用

4.1 ffmpeg

  • 是一个命令行程序,直接在命令行运行;
  • ffmpeg -h指令用来查看帮助信息,其余功能后续会讲到,其余指令自行百度;

4.2 ffplay

  • 在cmd中进入具体文件目录,执行指令ffplay example.mp4即自动播放该视频(程序端口播放,不会调用软件,有牌面);
  • 播放完自动停留在最后一帧页面,Esc或者q按键退出,p键暂停;
  • 执行命令ffplay example.mp3即自动播放音频文件;
  • 方向键和鼠标都可以跳转播放位置,f键全屏,p键或者空格键暂停,w键切换显示模式;

4.3 ffprobe(不用细看……)

  • 在cmd中进入具体文件目录,执行指令ffprobe example.mp4,即可显示媒体文件的头文件,其中包括参数信息等,如图:
    • Metadata:媒体信息部分;
      • major_brand:容器格式为mp4-v2;
      • Duration:持续时间,44分59秒44;
      • start:开始时间,0;
      • bitrate:比特率,16908kb/s;
    • Stream #0.0:视频流参数;
      • Video:编码,h264高规格编码;
      • avc1封装;
      • 颜色空间为yuv420p;
      • 分辨率1920*1080;
      • 比特率,16776kb/s;
      • 帧率,29.61帧每秒
    • Stream #0.1:音频流参数;
      • aac编码;
      • LC规格;
      • mp4a封装;
      • 采样率,48000Hz;
      • stereo双声道;
      • fltp立体声;
      • 比特率,128kb/s;

image-20200914205207947

5.转换格式

  • 文件后缀名是文件的封装格式,不同的封装格式具有不同的标准;
  • 视频文件格式表示封装某种编码格式的视频,如RMVB表示只支持Real、Video编码格式封装的视频;

image-20200914211857129

  • 直接执行指令 ffmpeg -i input.mov output.mp4即可;
  • 其中 -i指令的含义是将输入文件转换视频格式为输出文件的格式并且命名;

6.改变编码

  • 一般的视频网站都是采用(支持1080p分辨率及以下):
    • mp4封装,H264视频编码+ACC音频编码;
    • WebM封装,VP8视频编码+Vorbis音频编码;
    • OGG封装,Theora视频编码+Vorbis音频编码;

6.1 音频编码

1
2
3
4
5
6
7
ffmpeg -i in.flac -acodec libmp31ame -ar 44100 -ab 320k -ac 2 out.mp3

# -i,表示输入文件,接参数in.flac
# -acodec,其中a是指音频audio,codec是编/解码器,这条指令是用来指定音频文件的编码器,后接参数libmp31ame就是说以mp3格式编码,实际上编码器会自动根据输出文件后缀自动寻找匹配的编码器
# -ar,设置音频采样率,不输入指令默认采用原音频的采样率,一般是44100和48000两种
# -ab,设置音频比特率,不输入指令则默认128k
# -ac,设置声道数,1为单声道,2为双声道立体声,默认采用原音频声道数

6.2 视频压制

1
2
3
4
5
6
7
8
ffmpeg -i in.webm -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high-level:v4.1 -crf 23 -acodec aac -ar 44100 -ac 2 -b:a 128k out.mp4

# -s,缩放视频尺寸,1920*1080为新视频的宽高尺寸
# -pix_fmt,用来设置视频颜色空间,YUV(网络视频一般用这个)、NV、RGB等
# -vcodec,设置视频编码器,libx264是H264编码格式,一般都是使用这个编码
# -preset,编码器预设,调节预设可以改变编码算法的精度,精度越高,编码速度越慢,CPU占用率越多,有十个参数可选:ultrafast superfast veryfast faster fast slower veryslow placebo medium slow,默认是medium
# -profile:v,用来指定编码器的配置,主要和压缩比有关,超清视频设置为hegh即可
# -crf,设置码率控制模式

6.3 码率控制模式

  • 概念:码率控制就是决定为每一个帧画面分配多少比特数,这是在权衡文件体积和画面质量;

  • 三种码率控制模式:

    • -qp:恒定量化器模式,个人手动设置码率,不推荐

    image-20200923111749870

    • -crf:恒定速率因子模式,浮动的qp模式,对某些视觉敏感的画面提高码率,而其余部分降低码率,即可压缩体积,常用;
    • -b:固定目标码率模式,对码率有限制,常用于视频网站控制视频体积及清晰度

7.提取音视频原件

7.1 提取去音频视频原件

1
ffmpeg -i in.mp4 -an -acodec copy v.mp4

7.2 提取去视频音频原件

  • 有些音频有特殊格式,使用以下方法不可提取音频,可以观看原视频
1
ffmpeg -i in.mp4 -vn -acodec copy a.mp3

7.3 合并音视频文件

1
ffmpeg -i v.mp4 -i -a.mp3 -c copy out.mp4 

8.截取连接音视频

8.1 截取音视频

  • 第一种,其中-ss是开始时间,-to是结束时间,时间取时:分:秒
1
ffmpeg -i in.mp3 -ss 00:01:00 -to 00:01:10 -acodec copy out.mp3
  • 第二种,-t是截取时长,单位取秒
1
ffmpeg -i in.mp3 -ss 00:01:00 -t 10 -acodec copy out.mp3
1
2
-sseof指令可以从音视频末尾开始,结合 -t指令,更加灵活
-copyts指令用来保留时间戳

8.2 连接音视频

1
ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4

实话实说这个太底层了,虽然万能,但还不如直接用图形软件来的简单方便……

视频链接:

https://www.bilibili.com/video/BV1Ft411s7Xa?p=8

-------- 本文结束 感谢阅读 --------