http://bbs.ngacn.cc/read.php?tid=7079971&rand=665
我是斗鱼14247病床的UP,现在为大家介绍使用FFmpeg直接录屏并直播的方法。
附件请从这里下载:[http://pan.baidu.com/s/1kTyroRP]
1.2版附件请从这里下载:[http://pan.baidu.com/s/1jGgd79O]
首先介绍一下我的系统环境:
System: Distro: Linux Mint 13 Maya
Desktop: MATE
Mainboard: MSI Z77IA-E51 (MS-7733)
CPU: Quad-Core Intel Core i7-3770T CPU (OC @ 4.10 GHz)
Memory: Type: Dual Channel DDR3-1866 CL10
Size: 16384 MB
Graphics: Card: NVIDIA GK106 [GeForce GTX 650 Ti]
Monitor: DELL E1913
Resolution: 1440x900@75Hz
Network: Card-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
Card-2: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
Card-3: Intel Centrino Wireless-N 2230
SSD: KINGSTON SV300S37A120G
Capacity: 120 GB
HDD: ST2000VM003-1CT164
Capacity: 2.0 TB
使用的FFmpeg是ppa:jon-severinsson/ffmpeg上的0.10版本。Ubuntu/Debian官方源里的FFmpeg目前是Libav的过渡包,不建议使用。
附件中包括了自己编写的录屏的bash脚本以及斗鱼弹幕助手的Linux启动器(需要自行安装JRE),以及一些资源文件(例如金坷垃 精神污染 水印图片),不能直接使用,尤其是Windows用户。
settings.txt是用来配置斗鱼推流地址的。broadcast_lq.sh和broadcast_hq.sh分别是低/高码率的直播和录像。注意楼主使用的是MATE桌面环境,所以请自行修改使用的虚拟tty终端程序。
lib/lq.sh和lib/hq.sh是真正负责录像的脚本。录像和推流的参数在里面。
下面以更加常用的低码率为例介绍ffmpeg的参数。参数是简化了的,只能录像不能推流。
Windows用户请先阅读[http://trac.ffmpeg.org/wiki/How%20to%20grab%20the%20desktop%20(screen)%20with%20FFmpeg]。安装合适的DirectShow设备,修改Linux依赖的对应行(主要是第二行和第三行)就可以了。
ffmpeg -y -loglevel info \ # 忽略文件覆盖提示,日志输出级别为“信息”。
-f x11grab -framerate 25 -r 25 -s 1440x810 -i :0.0+0,45 -vsync vfr \ # 视频捕捉设备是x11grab(注释0),捕捉速率25帧每秒,视频帧率25帧每秒,视频原始分辨率1440x810,裁剪掉上面和下面各45像素高度区域,视频同步方式为时间码。
-f alsa -ar 44100 -ac 2 -cutoff 12000 -i pulse -async 20 \ # 音频捕捉设备是alsa(注释0),频率是44100Hz,立体声,低通滤波为12000Hz,使用pulseaudio方法,音频同步采样为20块每秒。
-vf "scale=1280:720[scaled]; movie=watermark.png[watermark]; [scaled][watermark] overlay=0:0" \ # 缩放视频尺寸为720p,添加全屏水印(水印本身是透明涂层)。
-vcodec libx264 -r 25 -pix_fmt yuv420p -preset medium -profile:v high \ # 视频编码器是libx264(即H.264输出),输出帧率25帧每秒,色彩编码是yuv420p,编码器预设为平衡速度和质量(注释1),编码器复杂度等级为高(注释2)。
-level 5.1 -crf 28 -maxrate 1500k -bufsize 1500k -refs 4 -qmin 4 \ # 视频编码器码率等级为5.1(最高)(注释3),恒定质量级别为28(注释4),最大码率为1500Kbps(斗鱼推荐值),并设置等大的编码缓冲区,调节Mac OS X系统解码器兼容性参数。
-x264opts bluray_compat=1:open_gop=1 -vsync cfr \ # 启用蓝光兼容(改善与硬件解码的兼容性),启用开放式帧组(大幅降低静态画面的码率),视频同步方式为掉帧/插帧。
-acodec libmp3lame -ar 44100 -aq 6 -compression_level 0 -async 20 \ # 音频编码器是libmp3lame(即MP3输出),频率44100Hz,变码率质量等级为6(注释5),听觉心理学模型全部启用(注释6),音频同步采样为20块每秒。
-f flv -movflags +faststart "record.flv" # 封装格式为FLV(注释7),并启用浏览器快速载入,文件名为record.flv(含路径)。
注释:
0:Windows用户请先阅读[http://trac.ffmpeg.org/wiki/How%20to%20grab%20the%20desktop%20(screen)%20with%20FFmpeg]。
1:电脑配置差一点/不少的话请设置preset为fast,veryfast。这会加大视频码率。
2:如果想让非常旧的iPhone 4S也能看视频,请设置profile:v为main。
3:如果想让非常旧的iPhone 4S也能看视频,请设置level为4.0。
4:像23-28之间的crf值都比较合理(越低质量越好),直播的话还是要考虑一下观看直播的长城宽带用户的感受。
5:像2-6这样的aq值都比较合理(越低质量越好)。如果设置aq为2-4范围的话可以把第三行的低通滤波参数修改为16000Hz。
6:电脑配置差很多的话compression_level改为3。这样做对质量影响不大,能提高不少编码速度。
7:若使用MP4封装,则最后一行为-f mp4 "record.mp4"。MP4不支持浏览器快速载入。
http://bbs.ngacn.cc/read.php?&tid=7079971