ffmpegsrs实现推流
ffmpeg常见参数usage:ffmpeg〔options〕〔〔infileoptions〕iinfile〕。。。{〔outfileoptions〕outfile}。。。基本选项:formats输出所有可用格式ffmt指定格式(音频或视频格式)ifilename指定输入文件名,在linux下当然也能指定:0。0(屏幕录制)或摄像头y覆盖已有文件tduration记录时长为tfslimitsize设置文件大小上限sstimeoff从指定的时间(s)开始,〔〕hh:mm:ss〔。xxx〕的格式也支持itsoffsettimeoff设置时间偏移(s),该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了offset秒。〔〕hh:mm:ss〔。xxx〕的格式也支持titlestring标题timestamptime时间戳authorstring作者copyrightstring版权信息commentstring评论albumstringalbum名vverbose与log相关的targettype设置目标文件类型(vcd,svcd,dvd,dv,dv50,palvcd,ntscsvcd,。。。)dframesnumber设置要记录的帧数视频选项:b指定比特率(bitss),似乎ffmpeg是自动VBR的,指定了就大概是平均比特率vb指定视频比特率(bitss)vframesnumber设置转换多少桢(frame)的视频rrate桢速率(fps)ssize分辨率aspectaspect设置视频长宽比(4:3,16:9or1。3333,1。7777)croptopsize设置顶部切除尺寸(inpixels)cropbottomsize设置底部切除尺寸(inpixels)cropleftsize设置左切除尺寸(inpixels)croprightsize设置右切除尺寸(inpixels)padtopsize设置顶部补齐尺寸(inpixels)padbottomsize底补齐(inpixels)padleftsize左补齐(inpixels)padrightsize右补齐(inpixels)padcolorcolor补齐带颜色(000000FFFFFF)vn取消视频vcodeccodec强制使用codec编解码方式(copytocopystream)sameq使用同样视频质量作为源(VBR)passn选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率passlogfilefile选择两遍的纪录文件名为filenewvideo在现在的视频流后面加入新的视频流高级视频选项pixfmtformatsetpixelformat,listasargumentshowsallthepixelformatssupportedintra仅适用帧内编码qscaleq以数值质量为基础的VBR,取值0。01255,约小质量越好loopinput设置输入流的循环数(目前只对图像有效)loopoutput设置输出视频的循环数,比如输出gif时设为0表示无限循环gint设置图像组大小cutoffint设置截止频率qminint设定最小质量qmaxint设定最大质量qdiffint量化标度间最大偏差(VBR)bfint使用framesB帧,支持mpeg1,mpeg2,mpeg4音频选项:ab设置比特率(单位:bits,也许老版是kbs)aframesnumber设置转换多少桢(frame)的音频aqquality设置音频质量(指定编码)arrate设置音频采样率(单位:Hz)acchannels设置声道数an取消音频acodeccodec指定音频编码(copytocopystream)volvolume设置录制音量大小(默认为256)newaudio在现在的音频流后面加入新的音频流字幕选项:sn取消字幕scodeccodec设置字幕编码(copytocopystream)newsubtitle在当前字幕后新增slangcode设置字幕所用的ISO639编码(3个字母)AudioVideo抓取选项:vcchannel设置视频捕获通道(只对DV1394)tvstdstandard设置电视标准NTSCPAL(SECAM)
vcodec和c:v,acodec和c:a的区别vcodec等价与c:vacodec等价与c:a流程图输入文件解封装视频码流音频码流封装输出文件
C音视频开发学习资料:点击领取音视频开发(资料文档视频教程面试题)(FFmpegWebRTCRTMPRTSPHLSRTP)
ffmpeg操作电脑获取电脑设备ffmpeglistdevicestruefdshowidummy〔dshow0000027bcb107d80〕XiaoMiUSB2。0Webcam(video)〔dshow0000027bcb107d80〕Alternativenamedevicepnp?usbvid05c8pid03ecmi006742fed800000{65e8773d8f5611d0a3b900a0c9223196}global〔dshow0000027bcb107d80〕麦克风阵列(适用于数字麦克风的英特尔智音技术)(audio)〔dshow0000027bcb107d80〕Alternativenamedevicecm{33D9A76290C811D0BD4300A0C911CE86}wave{D8148BF980C546F48390C21C4DBD56BB}
打开摄像头ffplayfdshowivideodevicepnp?usbvid05c8pid03ecmi006742fed800000{65e8773d8f5611d0a3b900a0c9223196}global
打开桌面ffmpegfgdigrabidesktopr60g60fflvrtmp:182。61。17。16:1935live1234ffmpeg视频转码转换成H264编解码ffmpegiinputfilevcodech264outputfilevcodech264表示视频编解码方式为H264。
转换成H265编解码ffmpegiinputfilevcodehevcoutputfilevcodechevc表示视频编解码方式为H265,注意ffmpeg中名称为hevc,不是H265!
设置输出视频的分辨率ffmpegiinputfilevcodech264s1280x720outputfile其中s表示分辨率。
剪切某段视频ffmpegss0:05:00t0:1:30iinputfilevcodeccopyacodeccopyoutputfileffmpegss300t90iinputfilevcodeccopyacodeccopyoutputfile上面的两种方式等价,时间格式支持HH:MM:SS或者秒数。ss开始时间,t持续时间,vcodeccopy保持原视频编码,acodeccopy保持原音频编码。
分离音视频流保存为不同文件ffmpegiinputfilevcodeccopyanoutputfilevideo提取视频流ffmpegiinputfileacodeccopyvnoutputfileaudio提取音频流其中an表示不处理音频,vn表示不处理视频。
合并多个音视频文件为一个文件ffmpegivideofileiaudiofilevcodeccopyacodeccopyoutputfile
提取视频图像保存为图片文件ffmpegiinputfiler1fimage2image3d。jpeg提取图片其中r表示提取图像的频率,f表示输出格式,3d表示文件命名方式(也即生成的图片名为image001。jpeg,image002。jpeg,。。。。,image999。jpeg)。
录制rtsp网络数据流ffmpegirtsp:192。168。1。100:5555teststreamvcodeccopyout。avi将rtsp的网络视频流文件保存为out。avi本地文件ffmpeg视频推流推送离线视频ffmpegreitest。mp4vcodech264ccopyfflvrtmp:182。61。17。16:1935live1019232
推送电脑摄像头ffmpegfdshowivideodevicepnp?usbvid05c8pid03ecmi006742fed800000{65e8773d8f5611d0a3b900a0c9223196}globalvcodeclibx264fflvrtmp:182。61。17。16:1935demo1234
C音视频开发学习资料:点击领取音视频开发(资料文档视频教程面试题)(FFmpegWebRTCRTMPRTSPHLSRTP)
ffprobeffprobe获取视频信息获取视频信息ffprobefacetrans。mp4表明视频文件的封装格式属于mov,mp4,m4a,3gp,3g2,mj2格式集合Input0,mov,mp4,m4a,3gp,3g2,mj2,fromfacetrans。mp4:Metadata:majorbrand:isommajorbrand表明视频文件属于isomminorversion:0compatiblebrands:mp41avc1兼容格式有mp41avc1creationtime:20220224T08:18:00。000000Z视频文件创建时间是2022年02月24日8时18分00秒encoder:vlc3。0。7。1streamoutputencodereng:vlc3。0。7。1streamoutput表明视频文件时间长度是1分钟8。68秒,开始播放时间是0。0秒,视频码率是2553kbsDuration:00:01:08。68,start:0。000000,bitrate:2553kbs视频编码格式是h264,子类型是high类型,颜色空间是yuv420p,分辨率是1920x1080,码率是2552kbs,帧率是25。04帧每秒,tbr也是帧率的意思Stream0:0〔0x1〕(eng):Video:h264(High)(avc10x31637661),yuv420p(progressive),1920x1080〔SAR1:1DAR16:9〕,2552kbs,25。04fps,25tbr,1000ktbn(default)Metadata:creationtime:20220224T08:18:00。000000Zhandlername:VideoHandlervendorid:〔0〕〔0〕〔0〕〔0〕
视频元数据信息转json格式ffprobevquietshowformatshowstreamsprintformatjsonface。mp4{streams:〔{index:0,codecname:h264,codeclongname:H。264AVCMPEG4AVCMPEG4part10,profile:High,codectype:video,codectagstring:〔0〕〔0〕〔0〕〔0〕,codectag:0x0000,width:1920,height:1080,codedwidth:1920,codedheight:1080,closedcaptions:0,filmgrain:0,hasbframes:0,pixfmt:yuv420p,level:40,chromalocation:left,fieldorder:progressive,refs:1,isavc:false,nallengthsize:0,id:0x1e0,rframerate:251,avgframerate:251,timebase:190000,startpts:7200,starttime:0。080000,durationts:47062800,duration:522。920000,bitsperrawsample:8,extradatasize:34,}〕,format:{filename:face。mp4,nbstreams:1,nbprograms:0,formatname:mpeg,formatlongname:MPEGPS(MPEG2ProgramStream),starttime:0。080000,duration:522。920000,size:127365097,bitrate:1948521,probescore:26}}ffprobe获取视频总帧数ffprobeverrorcountframesselectstreamsv:0showentriesstreamnbreadframesofdefaultnokey1:noprintwrappers1input。mp4
备注:verror:这隐藏了info输出countframes:计算每个流的帧数,并在相应的流部分中报告。selectstreamsv:0:仅选择视频流showentriesstreamnbreadframes:只显示读取的帧数。ofdefaultnokey1:noprintwrappers1:将输出格式(也称为writer)设置为默认值,不打印每个字段的键(nokey1),不打印节头和页脚(noprintwrappers1)
C音视频开发学习资料:点击领取音视频开发(资料文档视频教程面试题)(FFmpegWebRTCRTMPRTSPHLSRTP)
srs启动命令。objssrsc。confhttp。flv。live。confsrs配置打开SRS提供的配置文件http。flv。live。conf并修改vimusrlocalsrsconfhttp。flv。live。conf内容如下:theconfigforsrstoremuxrtmptoflvlivestream。seehttps:github。comossrssrswikiv2CNDeliveryHttpStreamseefull。conffordetailconfig。listen1935;RTMP监听端口maxconnections1000;最大连接数daemonon;是否以守护进程方式启动httpserver{nginx服务enabledon;on为启用listen8080;监听端口dir。objsnginxhtml;nginx主页地址,服务启动成功后可以通过访问http:ip:port}vhostdefaultVhost{启用HTTPLIVESTREAMING虚拟主机服务httpremux{enabledon;是否启用mount〔vhost〕〔app〕〔stream〕。flv;〔vhost〕当前httplivestream的虚拟主机,该变量为可选项〔app〕当前httplivestream的app〔stream〕当前httplivestream的流通过设置不同后缀来实现不同输出不同视频流,可以为:。flv、。ts、。mp3、。aac播放地址为:http:ip:portlivelivestream。flv,注:此处端口为httpserver中设置的端口}}