图像_ffmpeg工具使用初步了解

标准

ITU-T 国际电信联盟电信标准分局下的 VCEG 视频编码专家组
ISO   国际标准化组织下属分支机构的 MPEG 动态图像专家组
    两家成立联合视频编码组JVI
2003年 H.264/MPEG-4 标准
2013年 H.265
2021年发布了H.266标准

FFmpeg

是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。
采用LGPL或GPL许可证
   格式转换
   提取图像
   图像变为动图
 Fast Forward 
 Moving Pitcture Expert Group 是一种流行的视频格式--后缀.mp4

历史

 基于C语言的开源框架--音频-视频-图像和字幕 
     Linux  1991年10月5日,林纳斯·托瓦兹在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生
            1995年,Red Hat公司成立,他们发布了一个基于Red Hat Linux的商业发行版
    Git  Linus Torvalds于2005年以GPL(GNU通用公共许可证)发布 (2002年至2005年使用 BitKeeper)
FFMpeg 
  2000年第一个版本发布,法国FabriceBellard发起	
  2013年 FFmpeg2.0发布
  2023年 FFmpeg6.0发布
参数说明 codecs 编码器
  Encoder编码   Muxing	 封装  编码器-encoder 
  Decoder解码   Demuxing 解封装

传播过程

比特率--  码率: 单位时间内传输数据大小 bit/s
人眼看到的视频画面质量 
   帧率--每秒显示多少帧-每秒传输的帧数--流畅感  frame  width height frame_size
   刷新率--只每秒刷新次数--图像稳定不容易闪烁
采样率--多用于音频--采样频率,声音信号的连贯和清晰 sample_rate
时间基准 	 

过程

01. 调动工具--调用命令行 
    已经编译好的FFmpeg包,依赖glibc库
	   shared 包提供头文件和东台路,不带shared包只有可执行程序
02. 调用函数
03. 对源码进行二次修改  

内部

编解码--编码和解码
format 格式   
crosstool-ng,这款工具用于交叉编译工具链的制作
    Windows环境,使用MSYS2,可以使用预编译好的crosstool-ng软件包

构成

Libraries   Tools
   libraries : libavfilter 滤镜子系统    过滤器等
              本身含的滤镜
              第三方滤镜--例如水印路径 字幕滤镜
   
bin/ 
  ffplay  相当于播放器 --没有桌面的的服务器不能播放--No such audio device	 
  ffprobe 程序是一个音视频 分析工具
   av audio video 音频和视频	  

传感器

摄像头:

USB 摄像头
IPC 网络摄像头  网络摄像机又叫IP CAMERA(简称IPC   IPC(Internet Protocol Camera,网络摄像头),
    网络摄像头简称WEBCAM ,英文全称为WEB CAMERA

 USB 摄像头一般都是 WebCam  USB 接在网关或主机上,比如 Linux 下: /dev/video0, /dev/video1
 IPC 网络摄像头
     绝大部分都支持 ONVIF 协议 输入用户名和密码,自动获取 StreamURI;
	  不支持 ONVIF 协议,可以采用 RTSP 协议进行对接 必须要知道摄像头流播放地址,就是 StreamURI ;
    Stream URI‌是指用于标识和访问流媒体资源的统一资源标识符(URI

  POE 供电的网络摄像头-以太网供电,这样就不需要为摄像头拉电源线和转换器
     POE(Power over Ethernet)是一种通过以太网电缆同时传输数据和电力的技术,
	 广泛应用于网络设备如IP电话、无线接入点(AP)、网络摄像机等

即点即播,一旦有客户端发起点播指令,应该在 几百毫秒 之内完成 采集->编码->解码->视频流
没有点播/直播时,要处于 suspend 或 standby 的状态,以便节省计算和网络资源

协议:

 ONVIF(Open Network Video Interface Forum)协议,即开放型网络视频接口论坛协议 
    定义通用协议,包括装置搜寻、实时视频、音频、元数据和控制信息等	 
 实时流传输协议(Real Time Streaming Protocol,RTSP
 WebRTC (Web Real-Time Communications) 是一项实时通讯技术
     WebRTC为浏览器间的点对点实时音视频交流提供原生支持
	    种允许网页直接进行实时音视频通信和数据共享的技术

软件

 Camhi  
 ThingsBoard 是一个基于Java的开源物联网平台,旨在实现物联网项目的快速开发、管理和扩展
     规则链(Rule Chains)是 ThingsBoard 中一个关键的特性

编写过程中的bug

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
 ffmpeg的参数结构包括三个部分,分别为
     global_options: 全局参数
     [input_file_options:输入参数(可为空)] -i input_url:输入url
     [output_file_options: 输出参数(可为空)] output_url:输出url

帧率(Frame Rate)是指每秒钟显示的帧数,通常以fps(Frames Per Second)
^  ffmpeg -framerate 30 -i images/%d.jpg   -c:v libx264 -pix_fmt yuv420p output_video01.mp4
   ffmpeg -r 30 -i images/%d.jpg   -c:v libx264 -pix_fmt yuv420p  -r 30 output_video04.mp4

>  ffmpeg -i images/%d.jpg  -framerate 30  -c:v libx264 -pix_fmt yuv420p output_video02.mp4
   ffmpeg -i images/%d.jpg  -framerate 30  -c:v libx264 -pix_fmt yuv420p  -r 30 output_video03.mp4
    ffmpeg -i images/%d.jpg  -r 30  -c:v libx264 -pix_fmt yuv420p  -r 30 output_video03.mp4
   
  
     如果未指定帧率,默认为25,在i 后设置全局变量不生效
	  fps=30表示输出图像的帧率为30帧每秒
	 To force the frame rate of the input file (valid for raw formats only) to 1 fps and the frame rate of the output file to 24 fps:
      ffmpeg -r 1 -i input.m2v -r 24 output.avi
命令行的全局变量 
  全局参数  输入输出参数,那就作为一般参数处理	
	 参数选项由三部分组成:
	   可选的一组全局参数、
	   一组或多组输入文件参数、
	   一组或多组输出文件参数,
	 其中,每组输入文件参数以‘-i’为结束标记;每组输出文件参数以输出文件名为结束标记   
	   -c codec:指定解码器,需使用能力集列表中的名称
	-map:一条ffmpeg命令中,可能有多个输入和输出。-map指定哪个输入对应哪个输出。如果没有使用-map进行指定,那么会使用默认的方法进行指定   	
  ffmpeg:这个是可执行程序本身,可以是绝对路径,如上一篇中的/opt/ffmpeg/_build/bin/ffmpeg
  [global_options]:这个是全局参数部分,如指定日志级别等
 {[input_file_options] -i input_url}:这部分是输入参数部分,也可以理解为视频源部分,这部分可以指定一个或多个视频源及参数,需要注意的是参数在前,-i 后面是视频源的路径
 {[output_file_options] output_url}:这部分是输入部分,指定输出的格式及其参数,同样可以指定一个或多个,参数在前,输出文件在后,但这里没有“-i”这样的标记参数

参考

 https://git.ffmpeg.org/ffmpeg.git	
 https://github.com/FFmpeg/FFmpeg
posted @ 2025-03-07 17:52  辰令  阅读(56)  评论(0)    收藏  举报