龙空技术网

ffmpeg+srs实现推流

音视频开发老舅 1625

前言:

眼前兄弟们对“js前端视频ffmpeg转码”大概比较关怀,咱们都想要知道一些“js前端视频ffmpeg转码”的相关知识。那么小编也在网络上收集了一些有关“js前端视频ffmpeg转码””的相关内容,希望小伙伴们能喜欢,我们快快来了解一下吧!

ffmpeg常见参数

usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
基本选项:-formats    输出所有可用格式-f fmt  指定格式(音频或视频格式)-i filename     指定输入文件名,在linux下当然也能指定:0.0(屏幕录制)或摄像头-y  覆盖已有文件-t duration     记录时长为t-fs limit_size  设置文件大小上限-ss time_off    从指定的时间(s)开始, [-]hh:mm:ss[.xxx]的格式也支持-itsoffset time_off     设置时间偏移(s),该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持-title string   标题-timestamp time     时间戳-author string  作者-copyright string   版权信息-comment string     评论-album string   album名-v verbose  与log相关的-target type    设置目标文件类型("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ...)-dframes number     设置要记录的帧数视频选项:-b  指定比特率(bits/s),似乎ffmpeg是自动VBR的,指定了就大概是平均比特率-vb     指定视频比特率(bits/s)-vframes number     设置转换多少桢(frame)的视频-r rate     桢速率(fps)-s size     分辨率-aspect aspect  设置视频长宽比(4:3, 16:9 or 1.3333, 1.7777)-croptop size   设置顶部切除尺寸(in pixels)-cropbottom size    设置底部切除尺寸(in pixels)-cropleft size  设置左切除尺寸 (in pixels)-cropright size     设置右切除尺寸 (in pixels)-padtop size    设置顶部补齐尺寸(in pixels)-padbottom size     底补齐(in pixels)-padleft size   左补齐(in pixels)-padright size  右补齐(in pixels)-padcolor color     补齐带颜色(000000-FFFFFF)-vn     取消视频-vcodec codec   强制使用codec编解码方式('copy' to copy stream)-sameq  使用同样视频质量作为源(VBR)-pass n     选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率-passlogfile file   选择两遍的纪录文件名为file-newvideo   在现在的视频流后面加入新的视频流高级视频选项-pix_fmt format     set pixel format, 'list' as argument shows all the pixel formats supported-intra  仅适用帧内编码-qscale q   以<数值>质量为基础的VBR,取值0.01-255,约小质量越好-loop_input     设置输入流的循环数(目前只对图像有效)-loop_output    设置输出视频的循环数,比如输出gif时设为0表示无限循环-g int  设置图像组大小-cutoff int     设置截止频率-qmin int   设定最小质量-qmax int   设定最大质量-qdiff int  量化标度间最大偏差 (VBR)-bf int     使用frames B 帧,支持mpeg1,mpeg2,mpeg4音频选项:-ab     设置比特率(单位:bit/s,也许老版是kb/s)-aframes number     设置转换多少桢(frame)的音频-aq quality     设置音频质量 (指定编码)-ar rate    设置音频采样率 (单位:Hz)-ac channels    设置声道数-an     取消音频-acodec codec   指定音频编码('copy' to copy stream)-vol volume     设置录制音量大小(默认为256)-newaudio   在现在的音频流后面加入新的音频流字幕选项:-sn     取消字幕-scodec codec   设置字幕编码('copy' to copy stream)-newsubtitle    在当前字幕后新增-slang code     设置字幕所用的ISO 639编码(3个字母)Audio/Video 抓取选项:-vc channel     设置视频捕获通道(只对DV1394)-tvstd standard     设置电视标准 NTSC PAL(SECAM)

vcodec和-c:v,-acodec和-c:a的区别

-vcodec 等价与 -c:v   -acodec 等价与 -c:a
流程图输入文件解封装视频码流音频码流封装输出文件

C++音视频开发学习资料点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

ffmpeg操作电脑获取电脑设备

ffmpeg -list_devices true -f dshow -i dummy[dshow @ 0000027bcb107d80] "XiaoMi USB 2.0 Webcam" (video)[dshow @ 0000027bcb107d80]   Alternative name "@device_pnp_\?\usb#vid_05c8&pid_03ec&mi_00#6&742fed8&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"[dshow @ 0000027bcb107d80] "麦克风阵列 (适用于数字麦克风的英特尔® 智音技术)" (audio)[dshow @ 0000027bcb107d80]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{D8148BF9-80C5-46F4-8390-C21C4DBD56BB}"

打开摄像头

ffplay -f dshow -i video="@device_pnp_\?\usb#vid_05c8&pid_03ec&mi_00#6&742fed8&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"

打开桌面

ffmpeg -f gdigrab -i desktop  -r 60  -g 60 -f flv  rtmp://182.61.17.16:1935/live/1234
ffmpeg视频转码转换成H264编解码
ffmpeg -i input_file -vcodec h264 output_file # -vcodec h264 表示视频编解码方式为 H264。

转换成H265编解码

ffmpeg -i input_file -vcode hevc output_file # -vcodec  hevc 表示视频编解码方式为 H265,注意ffmpeg 中名称为 hevc,不是H265!

设置输出视频的分辨率

ffmpeg -i input_file -vcodec h264 -s 1280x720 output_file# 其中 -s 表示分辨率。

剪切某段视频

ffmpeg -ss 0:05:00 -t 0:1:30 -i input_file -vcodec copy -acodec copy output_fileffmpeg -ss 300 -t 90  -i input_file -vcodec copy -acodec copy output_file#上面的两种方式等价,时间格式支持 HH:MM:SS或者秒数。 -ss 开始时间, -t 持续时间, -vcodec copy 保持原视频编码, -acodec copy 保持原音频编码。

分离音视频流保存为不同文件

ffmpeg -i input_file -vcodec copy -an output_file_video  //提取视频流ffmpeg -i input_file -acodec copy -vn output_file_audio  //提取音频流# 其中 -an 表示不处理音频, -vn 表示不处理视频。

合并多个音视频文件为一个文件

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

提取视频图像保存为图片文件

ffmpeg –i input_file –r 1 –f image2 image-%3d.jpeg        //提取图片# 其中 -r 表示提取图像的频率,-f 表示输出格式, %3d 表示文件命名方式(也即生成的图片名为 image-001.jpeg, image-002.jpeg, ...., image-999.jpeg)。

录制rtsp网络数据流

ffmpeg –i rtsp://192.168.1.100:5555/test_stream –vcodec copy out.avi将rtsp的网络视频流文件保存为 out.avi 本地文件
ffmpeg 视频推流推送离线视频
ffmpeg -re  -i test.mp4 -vcodec h264 -c copy -f flv rtmp://182.61.17.16:1935/live/1019232

推送电脑摄像头

ffmpeg -f dshow -i video="@device_pnp_\?\usb#vid_05c8&pid_03ec&mi_00#6&742fed8&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" -vcodec libx264 -f flv  rtmp://182.61.17.16:1935/demo/1234

C++音视频开发学习资料点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

ffprobeffprobe获取视频信息获取视频信息

ffprobe face_trans.mp4#### 表明视频文件的封装格式属于 mov,mp4,m4a,3gp,3g2,mj2 格式集合Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'face_trans.mp4':   Metadata:    major_brand     : isom # major_brand表明视频文件属于isom    minor_version   : 0    compatible_brands: mp41avc1 # 兼容格式有mp41avc1    creation_time   : 2022-02-24T08:18:00.000000Z # 视频文件创建时间是2022年02月24日8时18分00秒    encoder         : vlc 3.0.7.1 stream output    encoder-eng     : vlc 3.0.7.1 stream output  # 表明视频文件时间长度是1分钟8.68秒,开始播放时间是0.0秒,视频码率是2553kb/s  Duration: 00:01:08.68, start: 0.000000, bitrate: 2553 kb/s  # 视频编码格式是h264,子类型是high类型,颜色空间是yuv420p,分辨率是1920x1080,码率是2552kb/s,帧率是25.04帧每秒,tbr也是帧率的意思  Stream #0:0[0x1](eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 2552 kb/s, 25.04 fps, 25 tbr, 1000k tbn (default)    Metadata:      creation_time   : 2022-02-24T08:18:00.000000Z      handler_name    : VideoHandler      vendor_id       : [0][0][0][0]

视频元数据信息转json格式

ffprobe -v quiet -show_format -show_streams -print_format json face.mp4#### {    "streams": [        {            "index": 0,            "codec_name": "h264",            "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",            "profile": "High",            "codec_type": "video",            "codec_tag_string": "[0][0][0][0]",            "codec_tag": "0x0000",            "width": 1920,            "height": 1080,            "coded_width": 1920,            "coded_height": 1080,            "closed_captions": 0,            "film_grain": 0,            "has_b_frames": 0,            "pix_fmt": "yuv420p",            "level": 40,            "chroma_location": "left",            "field_order": "progressive",            "refs": 1,            "is_avc": "false",            "nal_length_size": "0",            "id": "0x1e0",            "r_frame_rate": "25/1",            "avg_frame_rate": "25/1",            "time_base": "1/90000",            "start_pts": 7200,            "start_time": "0.080000",            "duration_ts": 47062800,            "duration": "522.920000",            "bits_per_raw_sample": "8",            "extradata_size": 34,            }    ],    "format": {        "filename": "face.mp4",        "nb_streams": 1,        "nb_programs": 0,        "format_name": "mpeg",        "format_long_name": "MPEG-PS (MPEG-2 Program Stream)",        "start_time": "0.080000",        "duration": "522.920000",        "size": "127365097",        "bit_rate": "1948521",        "probe_score": 26    }}
ffprobe获取视频总帧数
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 input.mp4

备注:

-v error:这隐藏了“info”输出-count_frames:计算每个流的帧数,并在相应的流部分中报告。-select_streams v:0 :仅选择视频流-show_entries stream = nb_read_frames :只显示读取的帧数。-of default = nokey = 1:noprint_wrappers = 1 :将输出格式(也称为“writer”)设置为默认值,不打印每个字段的键(nokey = 1),不打印节头和页脚(noprint_wrappers = 1)

C++音视频开发学习资料点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

srs启动命令

./objs/srs -c ./conf/http.flv.live.conf
srs配置
# 打开SRS提供的配置文件http.flv.live.conf并修改# vim /usr/local/srs/conf/http.flv.live.conf内容如下:# the config for srs to remux rtmp to flv live stream.# @see  @see full.conf for detail config.listen              1935;                   # RTMP监听端口max_connections     1000;                   # 最大连接数daemon on;                                  # 是否以守护进程方式启动http_server {                               # nginx服务     enabled         on;                     # on为启用    listen          8080;                   # 监听端口    dir             ./objs/nginx/html;      # nginx主页地址,服务启动成功后可以通过访问}vhost __defaultVhost__ {                 # 启用HTTP LIVE STREAMING虚拟主机服务    http_remux {        enabled     on;             # 是否启用        mount       [vhost]/[app]/[stream].flv;        # [vhost] 当前http live stream 的虚拟主机,该变量为可选项        # [app] 当前http live stream的app        # [stream] 当前http live stream的流        # 通过设置不同后缀来实现不同输出不同视频流,可以为:.flv、.ts、.mp3、.aac        # 播放地址为:,注:此处端口为http_server中设置的端口    }}

标签: #js前端视频ffmpeg转码