热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ffmpeg基础学习(一)介绍、安装、工具基本用法

文章目录一、概念FFmpeg介绍---跨平台录制、转换以及流化音视频解决方案FFmpeg开发者库---封装libavformat、解码libavcodec、缩放libswscale

文章目录

    • 一、概念
      • FFmpeg介绍---跨平台录制、转换以及流化音视频解决方案
      • FFmpeg开发者库---封装libavformat、解码libavcodec、缩放libswscale、滤镜libavfilter
      • FFmpeg工具---转换工具ffmpeg、播放器ffplay、解析工具ffprobe
    • 二、FFmpeg安装流程
      • 源码下载与编译安装
      • 安装报错解决yasm/nasm not found or too old
      • 安装过程没有生成ffplay解决
    • 三、FFmpeg工具基本用法
      • ffprobe---查看文件格式工具
      • ffplay---播放工具
      • ffmpeg---格式转化工具
    • 参考


一、概念


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 developersbuilt with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.4)configuration: --enable-shared --prefix=/usr/local/ffmpeglibavutil 56. 59.100 / 56. 59.100libavcodec 58.106.100 / 58.106.100libavformat 58. 58.100 / 58. 58.100libavdevice 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 : mp42minor_version : 1compatible_brands: M4V mp42isomcreation_time : 2014-04-27T11:43:22.000000ZDuration: 00:10:23.27, start: 0.000000, bitrate: 133 kb/sStream #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.000000Zhandler_name : Video Media Handlerencoder : AVC CodingStream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 53 kb/s (default)Metadata:creation_time : 2014-04-27T11:43:22.000000Zhandler_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/


推荐阅读
  • 本文介绍了在Android Studio中使用命令行build gradle的方法,并解决了一些常见问题,包括手动配置gradle环境变量和解决External Native Build Issues的方法。同时提供了相关参考文章链接。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • PatchODAX8: ... [详细]
  • 在加载一个第三方厂商的dll文件时,提示“找不到指定模块,加载失败”。由于缺乏必要的技术支持,百思不得期间。后来发现一个有用的工具 ... [详细]
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
  • 找到JDK下载URL当然去官网找了。目前最新的1.8的下载URL(RPM)如下:http:download.oracle.comotn-pubjavajdk8u161-b122f3 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • Windows 7 部署工具DISM学习(二)添加补丁的步骤详解
    本文详细介绍了在Windows 7系统中使用部署工具DISM添加补丁的步骤。首先需要将光驱中的安装文件复制到指定文件夹,并进行挂载。然后将需要的MSU补丁解压并集成到系统中。文章给出了具体的命令和操作步骤,帮助读者完成补丁的添加过程。 ... [详细]
author-avatar
睿哲小宝贝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有