前言:
眼前兄弟们对“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/1234ffmpeg视频转码转换成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.confsrs配置
# 打开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转码