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 -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 -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_file
ffmpeg -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 -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)
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 -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 input.mp4
备注:
C++音视频开发学习资料:点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
./objs/srs -c ./conf/http.flv.live.conf
# 打开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 https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHttpStream
# @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主页地址,服务启动成功后可以通过访问http://ip:port
}
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://ip:port/live/livestream.flv,注:此处端口为http_server中设置的端口
}
}
留言与评论(共有 0 条评论) “” |