一、概念

FFmpeg介绍—跨平台录制、转换以及流化音视频解决方案

Fast Forward mpeg是一套跨平台的可以记录、转换数字音频、视频,并能将其转化为流的开源 工具/开发套件。
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等.采用LGPL或GPL许可证。常见用来做:播放器、录屏器、直播推流、转码器等。

FFmpeg开发者库—封装libavformat、解码libavcodec、缩放libswscale、滤镜libavfilter

面对开发者最常用的典型库:
libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;libavcodec:用于各种类型声音/图像编解码;libavutil:包含一些公共的工具函数;libswscale:用于视频场景比例缩放、色彩映射转换;libavfilter:滤镜,提供了包括音频特效和视频特效的处理;

FFmpeg工具—转换工具ffmpeg、播放器ffplay、解析工具ffprobe

ffmpeg:一个进行格式转换的命令行工具;ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;ffprobe:一个 基础流信息解析查看工具;

二、FFmpeg安装流程

源码下载与编译安装

1)、获取安装包,官网:http://ffmpeg.org/download.html’
2)、解压安装包:tar -jxvf ffmpeg-snapshot.tar.bz2
3)、解压配置:./configure --prefix=/usr/local/ffmpeg (安装到/usr/local/ffmpeg下)
4)、编译安装:make;make install
5)、将/usr/local/ffmpeg放入环境变量:添加到/etc/profie末尾(source /etc/profie 立即生效)

export PATH=/usr/local/ffmpeg/bin:$PATH

6)、将/usr/local/ffmpeg/lib 路径加入动态装载器遍历路径/etc/ld.so.conf末尾 (ldconfig立即生效)

/usr/local/ffmpeg/lib

安装后检查,能输出help信息表示安装配置成功:

root@ubuntu:~# ffmpeg --help
ffmpeg version N-99260-g6401a5d Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
  configuration: --enable-shared --prefix=/usr/local/ffmpeg
  libavutil      56. 59.100 / 56. 59.100
  libavcodec     58.106.100 / 58.106.100
  libavformat    58. 58.100 / 58. 58.100
  libavdevice    58. 11.102 / 58. 11.102

安装报错解决yasm/nasm not found or too old

安装ffmpeg过程中,执行./configure时,报yasm/nasm not found or too old. Use --disable-yasm for a crippledbuild错误,
yasm是汇编编译器,ffmpeg为了提高效率使用了汇编指令,如MMX和SSE等。所以系统中未安装yasm时,就会报上面错误。安装yasm编译器。安装方法如下:
1)下载:wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
2)解压:tar zxvf yasm-1.3.0.tar.gz
3)切换路径: cd yasm-1.3.0
4)执行配置: ./configure
5)编译:make
6)安装:make install

安装过程没有生成ffplay解决

1、检查ffmpeg的ffbuild/config.mak是否打开了ffplay,即CONFIG_FFPLAY=yes(如果没打开前面会多一个!符号,删除他)
2、修改后进行make;make install
备注:ffplay是依赖于sdl来进行图像渲染的,依赖SDL库,如果没有库编译会报错:sudo apt-get install libsdl1.2-dev

三、FFmpeg工具基本用法

ffprobe—查看文件格式工具

ffprobe主要用来查看多媒体文件信息,基本使用方法: ffprobe [option] intputfile。

root@ubuntu:/home/Downloads# ffprobe test.mp4 
ffprobe version N-99260-g6401a5d Copyright (c) 2007-2020 the FFmpeg developers
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: M4V mp42isom
    creation_time   : 2014-04-27T11:43:22.000000Z
  Duration: 00:10:23.27, start: 0.000000, bitrate: 133 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709),
    	 1366x768 [SAR 1:1 DAR 683:384], 78 kb/s, 15 fps, 15 tbr, 15k tbn, 30 tbc (default)
    Metadata:
      creation_time   : 2014-04-27T11:43:22.000000Z
      handler_name    : Video Media Handler
      encoder         : AVC Coding
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 53 kb/s (default)
    Metadata:
      creation_time   : 2014-04-27T11:43:22.000000Z
      handler_name    : Sound Media Handler

ffprobe可用选项非常多,可以通过ffprobe --help查看。常用举例选项:
查看包信息:-show_packets
查看封装格式:-show_format
查看帧信息:-show_frames
查看流信息:-show_streams

ffplay—播放工具

ffplay是一个简单的播放工具,基于ffmpeg和SDL库,常用来做ffmpeg的接口测试。 基本用法:ffplay [options] input
基础选项:

'-x width'        强制以 "width" 宽度显示
'-y height'       强制以 "height" 高度显示
'-an'             禁止音频
'-vn'             禁止视频
'-ss pos'         跳转到指定的位置()
'-t duration'     播放 "duration" 秒音/视频
'-bytes'          按字节跳转
'-nodisp'         禁止图像显示(只输出音频)
'-f fmt'          强制使用 "fmt" 格式
'-window_title title'  设置窗口标题(默认为输入文件名)
'-loop number'    循环播放 "number"(0将一直循环)
'-showmode mode'  设置显示模式
可选的 mode :
'0, video'    显示视频
'1, waves'    显示音频波形
'2, rdft'     显示音频频带
默认值为 'video',你可以在播放进行时,按 "w" 键在这几种模式间切换
'-i input_file'   指定输入文件

'-sync type'          设置主时钟为音频、视频、或者外部。默认为音频。主时钟用来进行音视频同步
'-threads count'      设置线程个数
'-autoexit'           播放完成后自动退出
'-exitonkeydown'      任意键按下时退出
'-exitonmousedown'    任意鼠标按键按下时退出
'-acodec codec_name'  强制指定音频解码器为 "codec_name"
'-vcodec codec_name'  强制指定视频解码器为 "codec_name"
'-scodec codec_name'  强制指定字幕解码器为 "codec_name"

'q, ESC'            退出
'f'                 全屏
'p, SPC'            暂停
'w'                 切换显示模式(视频/音频波形/音频频带)
's'                 步进到下一帧
'left/right'        快退/快进 10'down/up'           快退/快进 1 分钟
'page down/page up' 跳转到前一章/下一章(如果没有章节,快退/快进 10 分钟)
'mouse click'       跳转到鼠标点击的位置(根据鼠标在显示窗口点击的位置计算百分比)

ffmpeg—格式转化工具

ffmpeg是一个格式转化工具,可选命令非常多,编码器、视频时长、帧率、分辨率、像素格式、采样格式、码率、裁剪选项、声道数等等都可以自由选择。基本用法 :ffmpeg [options] [[infile options] -i infile]… {[outfile options] outfile}

“ffmpeg” 读取任意数量的输入 “文件”(可以是常规文件、管道、网络流、录制设备等,由 “-i” 选项指定),写入任意数量的输出 “文件”。命令行中无法被解释为选项(option)的任何元素都会被当作输出文件。每个输入或输出文件,原则上都可以包含任意数量的流。FFmpeg 中流的类型有五种:视频(video)、音频(audio)、字幕(subtitle)、附加数据(attachment)、普通数据(data)。文件中流的数量和(或)流类型种数的极限值由文件封装格式决定。
举例:

设置输出文件码率为 64 kbit/s:
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
强制输入文件帧率(仅对 raw 格式有效)1 fps,输出文件帧率为 24 fps:
ffmpeg -r 1 -i input.m2v -r 24 output.avi
转封装:将 avi 格式转为 mp4 格式,并将视频缩放为 vga 分辨率:
ffmpeg -y -i video.avi -s vga video.mp4

选项:

通用选项
-fromats 显示可用的格式,编解码的,协议的...
-f fmt 强迫采用格式fmt
-I filename 输入文件
-y 覆盖输出文件
-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持
-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持
-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置
-itsoffset offset 设置以秒为基准的时间偏移,影响后面输入文件。正偏移表示延迟offset秒
-loop 循环输入流(只工作于图像流,用于ffserver测试)
视频选项
-b bitrate 设置比特率,缺省200kb/s
-r fps 设置帧频 缺省25
-s size 设置帧大小 格式为WXH 缺省160X128.简写可以使用:Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
-croptop size 设置顶部切除带大小 像素单位
-padtop size 设置顶部补齐的大小 像素单位
-bt tolerance 设置视频码率容忍度kbit/s
-maxrate bitrate 设置最大视频码率容忍度
-minrate bitreate 设置最小视频码率容忍度
-bufsize size 设置码率控制缓冲区大小
-vcodec codec 强制使用codec编解码方式。如果用copy表示原始编解码数据必须被拷贝。
-sameq 使用同样视频质量作为源(VBR)
-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
-passlogfile file 选择两遍的纪录文件名为file
音频选项
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ac channels 设置通道 缺省为1
-an 不使能音频纪录
-acodec codec 使用codec编解码

https://blog.csdn.net/leixiaohua1020/article/details/12751349

参考

雷霄骅blog:https://blog.csdn.net/leixiaohua1020/article/details/15811977
官网:http://ffmpeg.org/

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐