• 首页
  • Qt文档
  • DTK文档
  • 玲珑文档
  • 开源ffmpeg的使用

    当前钉钉完成适配的版本不支持语音/视频功能,正在开发此模块功能的阿里团队研发咨询我们相关编译及调用方面,ffmpeg是一个开源的音/视频/编码的方案,当前统信系统支持命令行方式调用,关于适配的api接口方案正在开发中,如果有第三方关于此方面的需求,ffmpeg算一个临时解决方案,具体使用方式如下:

    ffmpeg录制和推流指令

    相关术语

    缩写 全称 描述
    ffmpeg ffmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPLGPL许可证。提供了录制、转换以及流化音视频的完整解决方案。

    一、屏幕录制

    1.简单录屏录制

    • 指令

    ffmpeg -f x11grab -framerate 24 -video_size 1920x1080 -i ":0+0,0" -c:v libx264 out.mp4

    • 参数说明
    指令 描述
    -f x11平台:x11grabwayland平台:暂不支持windows平台:gdigrabMAC OS平台:avfoundation 视频输入设备
    -framerate 参考值:24 设置视频帧率
    -video_size 参考值:1920x1080,注:不能超过屏幕区域 设置录制视频分辨率
    -i 参考值:":z+x,y" z:"DISPLAY"环境变量内容;录屏区域左上角坐标(x,y),注:不能超过屏幕区域
    -c:v 参考值:libx264或者mpeg4编码格式 设置视频编码器类型

    2.复杂录屏录制

    • 指令

    ffmpeg -f x11grab -framerate 24 -probesize 24M -thread_queue_size 64 -video_size 1920x1080 -i ":0+0,0" -c:v libx264 -pix_fmt yuv420p -crf 23 -preset ultrafast -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4

    • 参数说明
    指令 描述
    -probesize 参考值:24M 设置用于读取文件信息的数据源大小
    -thread_queue_size 参考值:64 设置输入线程缓冲区大小
    -pix_fmt 参考值:yuv420p 设置像素格式
    -preset 指定编码速度,速度越慢,画质越好,cpu占用越高,可取值:"ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 调节编码速度与质量的平衡
    -crf Constant Rate Factor恒定码流控制,取值范围为0-51,其中0为无损模式;数值越大,画质越差,生成的文件越小。 恒速率因子
    -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" 视频过滤器,像素宽高偶数值

    3.录音频+视频

    • 指令

    ffmpeg -f pulse -ac 2 -ar 44100 -thread_queue_size 32 -fragment_size 4096 -i 0 -f x11grab -framerate 24 -probesize 24M -thread_queue_size 64 -video_size 1920x1080 -i ":0+0,0" -c:v libx264 -pix_fmt yuv420p -crf 23 -preset ultrafast -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4

    • 参数说明
    指令 描述
    -f pulse 设置音频源
    -ac 参考值:2 设置输出通道数
    -ar 参考值:44100 设置音频采样率
    -thread_queue_size 参考值:32 设置输入线程系统音频缓冲区大小
    -thread_queue_size 参考值:4096 设置音频帧大小
    -i 系统音频号,或麦克风:default 系统音频id
    • 查询系统音频号指令
    //arm
    pacmd list-sources | grep -PB 1 'USB.*stereo.*monitor>' | head -n 1 | perl -pe 's/.* //g'
    //mips
    pacmd list-sources | grep -v 'hdmi' | grep -PB 1 'output.*monitor>' | head -n 1 | perl -pe 's/.* //g'
    //x64
    pacmd list-sources | grep -PB 1 'analog.*monitor>' | head -n 1 | perl -pe 's/.* //g'    
    

    4.录混音+视频

    • 说明:混音是指:录制系统音+麦克风音

    • 指令

      ffmpeg -f pulse -ac 2 -ar 44100 -thread_queue_size 32 -fragment_size 4096 -i 1 -f pulse -ac 2 -ar 44100 -thread_queue_size 32 -fragment_size 4096 -i default -filter_complex amerge -f x11grab -framerate 24 -probesize 24M -thread_queue_size 64 -video_size 1920x1080 -i :0+0,0 -c:v libx264 -pix_fmt yuv420p -crf 23 -preset ultrafast -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4

    • 参数说明

    • 参数顺序

      录制混音时,系统音放前面。

    指令 描述
    -filter_complex amerge 音频合并

    二、录制摄像头

    1.简单录制摄像头

    • 指令

    ffmpeg -s 1920x1080 -i /dev/video0 out.mp4

    • 参数说明
    指令 描述
    -s 参考值:1920x1080 调整视频分辨率
    -i 叁考值:/dev/video0,查询摄像头设备指令:ls /dev/video* 摄像头视频源

    三、推流

    1.视频文件推流

    • 指令
    ffmpeg -re -i "out.mp4" -vcodec copy -acodec aac -b:a 192k -f flv "rtmp://sendtc3.douyu.com/live/2116359r67ZTiAMB?wsSecret=436d60ecb2442c7b8d9e8233928af41c&wsTime=6084ff3c&wsSeek=off&wm=0&tw=0&roirecognition=0&record=flv&origin=tct"
    
    • 参数说明
    指令 描述
    -re 按照视频的FPS进行推流
    -i "out.mp4" 被推的视频文件
    -vcodec copy 指定视频编码为复制
    -acodec aac 音频使用aac编码
    -b:a 192k 指定码率
    -f flv 指定输出格式,必须为flv,才能推送至直播服务器

    2.摄像头推流

    • 指令
    ffmpeg -f video4linux2 -r 12 -s 640x480 -i /dev/video0 -vcodec libx264 -f flv "rtmp://sendtc3.douyu.com/live/2116359r67ZTiAMB?wsSecret=436d60ecb2442c7b8d9e8233928af41c&wsTime=6084ff3c&wsSeek=off&wm=0&tw=0&roirecognition=0&record=flv&origin=tct"
    
    • 参数说明
    指令 描述
    -f video4linux2 格式
    -r 12 帧率
    -s 640x480 设置视频分辨率
    -i /dev/video0,查询摄像头设备指令:ls /dev/video* 摄像头视频源

    3.屏幕推流

    • 指令
    ffmpeg -f x11grab -framerate 12 -video_size 1920x1080 -i ":0+0,0" -c:v libx264 -f flv "rtmp://sendtc3.douyu.com/live/2116359r67ZTiAMB?wsSecret=436d60ecb2442c7b8d9e8233928af41c&wsTime=6084ff3c&wsSeek=off&wm=0&tw=0&roirecognition=0&record=flv&origin=tct"
    
    • 参数说明
    指令 描述
    -f x11平台:x11grabwayland平台:暂不支持windows平台:gdigrabMAC OS平台:avfoundation 视频输入设备
    -framerate 参考值:12 设置视频帧率
    -video_size 参考值:1920x1080,注:不能超过屏幕区域 设置视频分辨率
    -i 参考值:":z+x,y" z:"DISPLAY"环境变量内容;录屏区域左上角坐标(x,y),注:不能超过屏幕区域
    -c:v 参考值:libx264或者mpeg4编码格式 设置视频编码器类型
    -f flv 指定输出格式,必须为flv,才能推送至直播服务器

    注:由于目前未架设推流服务器,所采用斗鱼免费推流服务器用于测试。rtmp地址为实名认证推流地址,仅用于测试,并且不能推送非法内容