ffmpeg 5.0 (ffmpeg常用指令)

推流指令

将本地文件以 RTMP 方式推送到服务器

  • 格式
ffmpeg -i 数据源 -acodec copy -vcodec copy -f flv RTMP服务器地址
  • 示例
ffmpeg -i ./"Agents of SHIELD Season 7 01.mkv" -acodec copy -vcodec copy -f flv rtmp://pili-publish.xxx.com/dev-test/05810586409?e=1602643284&token=XQG3bWdjVJ4VFQDDXnMwyp0312XC-lsKGl685yA8:pP0uSpckPM7uW7MBXbx8c7DhC60=
    • 将本的的视频 Agents of SHIELD Season 7 01.mkv 文件以 flv 文件格式推送到 RTMP 服务器上

HLS 推流指令

以 hls 推流,服务器开放 http 接口为: http://192.168.8.73:9080/hls/record/{tag}/{tsName} ffmpeg 参数最后一个URL)。 ffmpeg 会向此地址发送两种包,一种是 m3u8 的*放播**列表,另一个则是 `TS 的视频流。请求URL示列如下:

m3u8*放播**列表 = http://192.168.8.73:9080/hls/record/8101430143-2/stream.m3u8
ts流url = http://192.168.8.73:3333/hls/record/8101430143-2/stream0.ts
  • HLS 推流完整指令示例:
ffmpeg -i http://localhost:8080/video/8101430143-1 -vcodec copy -acodec aac -bf 0 -f hls -hls_list_size 10 -hls_wrap 5 -hls_time 5 -hls_base_url http://192.168.8.73:9080/hls/play/8101430143-1/ -method put http://192.168.8.73:9080/hls/record/8101430143-1/stream.m3u8
  • 此示例中,数据来源来 http 接口地址。  
  • hls_list_size:设置*放播**列表保存的最多记录条数,设置为0则会保留所有分片信息,默认为5
  • hls_wrap:设置多少片后开始覆盖,如果设置为0则不覆盖,默认为0。此功能能够避免在磁盘上存储过多的分片,而且能够限制写入磁盘的最多分片数量 。
  • hls_time:设置每片的时间长度,默认为2,单位/秒
  • hls_start_number:设置*放播**列表中的 sequence number 值,默认为0。即从0开始计数。
  • hls_base_url:在*放播**列表中,记录 ts 文件的URL前缀。生成的 ts 会在此地址后面拼接成完整的请求地址。如: stream0.tx 会拼接到 hls_base_url 值的后面。

其它参数:

 -i 要处理视频文件的路径
 -acodec 音频处理的格式
 -strict experimental 更标准的严格性
 -ar 设置音频采样率
 -ac 设置通道为2
 -b:a 要将输出文件的音频比特率设置为96 kbit/s
 -r 要强制输出文件的帧频为24 fps
 -b:v 要将输出文件的视频比特率设置为5ee kbit/s。
 -s 分辨率,传输的带宽根据分辨率来设定的,-b:v不能控制
 -f 强制输出的视频格式
 -hls_time 为切片的秒数
 -hls_list_size 设置*放播**列表保存的最多条目,我这里设置为e会保存有所片信息,默认值为5
 -hls_wrap 为切片的个数
  -force_key_frames "expr:gte(t,n_forced*1)"  强制设置关键帧间隔时间,项改为5秒,则修改后的参数为: -force_key_frames "expr:gte(t,n_forced*5)"