ffmpeg流媒体相关问题

近期通过ffmpeg推送直播流时遇到的一些问题汇总

以Raspberry 4B 搭配板载音频的USB Camera 实时采集音视频混合推流到rtmp服务器, 同时保存视频流到本地为例, 最终的ffmpeg推流命令为:

ffmpeg -f video4linux2 -s 1280x720 -ss 0.5 -i /dev/video0 -f alsa -i hw:1,0 -filter:a "volume=10" -c:v h264_omx -b:v 8000k -c:a aac -vf drawtext="expansion=strftime:fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf:x=w-tw:fontcolor=yellow:fontsize=20:text='TuTuOnline ☆ %Y-%m-%d  %H\\:%M\\: %S" -f flv rtmp://ip:port/rtmpapplication/root/stream -c:v h264_omx -b:v 8000k -f mp4 /home/live/$(date +%Y-%m-%d)_$(date +%H:%M).mp4

参考

ffmpeg官方文档


基本参数

  • -i 指定输入文件名, 也可以是另一个流, 在linux下也能指定:0.0(屏幕录制)或摄像头驱动路径
  • -ss 从指定的时间(s)开始
  • -c:v指定编解码器(如果有硬解码, 可以使用此参数指定)
  • -formats 输出所有可用格式
  • -f 指定格式(音频或视频格式)
  • -y 覆盖已有文件
  • -title 标题
  • -timestamp 时间戳
  • -author 作者
  • -copyright 版权信息
  • -comment 评论
  • -dframes 设置帧数

视频参数

  • -b 指定比特率(bits/s)
  • -vb 指定视频比特率(bits/s)
  • -r 指定帧速率(fps)
  • -s 指定推送画面的分辨率
  • -aspect 设置视频长宽比(4:3, 16:9 or 1.3333, 1.7777)
  • -vn 取消视频
  • -vcodec 视频编解码格式,如:h264或者libx264(h264编解码)、copy(原样拷贝)、mpeg4(mp4编码)
  • -newvideo 在现有视频流后面加入新的视频流
  • -vf 添加滤镜(可以是特效, 也可以是文字/图片等)

音频参数

  • -ab 设置比特率(单位:bit/s,也许老版是kb/s)前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换 默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上
  • -aframes 设置转换多少桢(frame)的音频
  • -aq 设置音频质量 (指定编码)
  • -ar 设置音频采样率 (单位:Hz)
  • -ac 设置声道数,1单声道,2立体声
  • -an 取消音频
  • -vol 设置录制音量大小(默认为256) <百分比>
  • -newaudio 在现在的音频流后面加入新的音频流

字幕参数

  • -sn 取消字幕
  • -scodec 设置字幕编码('copy' to copy stream)
  • -newsubtitle 在当前字幕后新增