FFmpeg 录制桌面、麦克风、摄像头

前言

老师要我们试试能不能用手机拍摄视频然后发送到树莓派上。可能以后要然树莓派处理视频之类。老师描述的场景好像实时的。虽然需求不明确,我们就先试试吧。我的计划是在树莓派上搭建好流媒体服务器,然后手机拍摄视频并推送到服务器。但是找了好久也找不到靠谱的可以实时拍摄视频并推送到服务器的 Android 应用。我们也不会 Android 开发。好不容器把树莓派上的 rtmp 服务搭建好,不想在 Android 开发浪费时间了。直接在笔记本用 FFmpeg 推流吧,只要能证明树莓派可以接收视频就可以了。

虽然之前用过 FFmppeg 的转码服务,但是采集视频和录音还真没干过。折腾了一天,终于知道了一些套路。先记录下来。下一步试试实时推送到树莓派上的 rtmp 服务上。

我的系统为Ubuntu 16.04 Desktop x64

录制麦克风

双声道,MP3 编码,MP3 文件格式

$ ffmpeg -f alsa -ac 2 -i hw:0,0 -acodec libmp3lame -f mp3 test1.mp3

AC3 编码,ACC 文件格式

$ ffmpeg -f alsa -ac 2 -i hw:0,0 -acodec ac3 -f ac3 test1.aac

选择音频采集设备时可以用 -i hw:0,0 也可以用 -i plus 。官网给出的示例用的是 -i /dev/dsp 但在我的系统上提示没有这个文件或目录。

录制桌面

$ ffmpeg -f x11grab -s 1920x1080 -i :0.0 -vcodec libx264 -f mp4 test1.mp4

分辨率设为 1080P,并采用 H.264 编码,最后保存为 MP4 格式。

录制摄像头

$ ffmpeg -f video4linux2 -s 1920x1080 -t 30 -i /dev/video0 -vcodec libx264 -f mp4 test2.mp4

-t 30 表示录制 30 秒视频。

录制桌面+麦克风

$ ffmpeg -f alsa -ac 2 -i pulse -f x11grab -video_size 1920x1080 -i :0.0 -vcodec libx264 -acodec ac3 test3.mp4

录制摄像头+麦克风

$ ffmpeg -f alsa -ac 2 -ar 44100 -i pulse  -f video4linux2 -framerate 30 -i /dev/video0 -framerate 30 -vcodec libx264 -acodec ac3 test4.mp4

女主播就是这么干的。

录制桌面+摄像头

将摄像头拍摄到的画面叠加在录制到的桌面画面的右下角

$ ffmpeg -thread_queue_size 96 -f x11grab -video_size 1920x1080 -i :0.0 -f video4linux2 -video_size 400x300  -i /dev/video0  -filter_complex '[0:v][1:v]overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10[out]' -map '[out]'  test5.mp4

这个任务消耗有点大,-thread_queue_size 必须设置一个比较大的值,要不然会看到 FFmpeg输出的日志信息中不停的提醒:[video4linux2,v4l2 @ 0x25fbc40] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8),拍摄到的视频也会出现莫名其妙的错误,比如帧率很高,无法正常播放,视频不流畅等等。把 -thread_queue_size 设置为一个比较大的值,直到看不到该提示即可。

录制桌面+摄像头+麦克风

$ ffmpeg -thread_queue_size 128 -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 -f video4linux2 -video_size 400x300 -framerate 30 -i /dev/video0 -f alsa -ac 2  -i pulse -filter_complex '[0:v][1:v]overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10[out]' -map '[out]' -map 2:a  -vcodec libx264 -acodec ac3 test6.mp4

和上面一样,注意给 -thread_queue_size 设置一个足够大的值。

补一个录制到的视频截图:

估计很多教程视频都是这么录制的。把录制的视频推一下流,就能直播写代码,直播玩游戏了。

再补一个成功推流后在手机上观看的截图:

不够有4秒的延时。在局域网内都有4秒延时,太坑了。可能是树莓派的配置问题。

推流命令:

$ ffmpeg -thread_queue_size 128 -f x11grab -video_size 1920x1080 -framerate 30 -i :0.0 -f video4linux2 -video_size 400x300 -framerate 30 -i /dev/video0 -f alsa -ac 2  -i pulse -filter_complex '[0:v][1:v]overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10[out]' -map '[out]' -map 2:a  -vcodec libx264 -vprofile baseline -acodec aac -strict -2 -maxrate 3000k -b:a 128k -f flv rtmp://192.168.1.12:1935/myapp/stream2

FFmpeg 录制桌面、麦克风、摄像头相关推荐

  1. ffmpeg录制桌面视频和麦克风音频(音视频同步)

    vs版本:2017 ffmpeg版本号: ffmpeg version N-102642-g864d1ef2fc Copyright © 2000-2021 the FFmpeg developers ...

  2. ffmpeg录制桌面(队列方式)

    vs版本:2017 ffmpeg版本号: ffmpeg version N-102642-g864d1ef2fc Copyright © 2000-2021 the FFmpeg developers ...

  3. ffmpeg录制桌面(自己用gdi抓图)

    之前写过两篇ffmpeg录制桌面,读者可以翻看我的博客,但是都存在着问题,尤其当一个进程里面,自己创建几个线程干其他事情时,出错概率大大增加, ret = avcodec_send_frame(pCo ...

  4. ffmpeg录制桌面,麦克风和系统声音独立成2路音轨

    之前本人写过下面一篇博客: ffmpeg 本地麦克风声音和系统声音混音后,再混合本地桌面成最终的mp4文件-修正 里面的麦克风声音和系统声音利用滤镜进行了混音处理,昨天夜晚再想如果麦克风声音和系统声音 ...

  5. ffmpeg录制桌面视频和系统内部声音(音视频同步)

    本文抓取的是电脑内部声音,需要先安装软件screen capture recorder,这个软件大小有50M,太大,安装后,里面有一个脚本文件,如下所示: 打开这个文件,可以看到如下内容: 这个文件比 ...

  6. ffmpeg gdi录制桌面视频时注意事项

    本人之前写了一个博客:ffmpeg录制桌面(自己用gdi抓图) 当时设置的帧率是10,设置的比较低,原因在于,设置高了,1秒钟抓不到对应的图片数量,会导致最终生成文件播放起来,时间变短.比如设置帧率为 ...

  7. I.MX6 FFmpeg 录制视频

    /************************************************************************** I.MX6 FFmpeg 录制视频* 说明:* ...

  8. C# ffmpeg 录制音视频

    最近研究用ffmpeg录制桌面视频,以下是研究时碰到的问题以及成果记录下. FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录 ...

  9. ffmpeg录制系统声音,麦克风声音,桌面视频,并且桌面视频和声音分两个线程写

    本人之前写过ffmpeg 本地麦克风声音和系统声音混音后,再混合本地桌面成最终的mp4文件-修正 这篇博客里面,如果设置抓取帧率为30帧,而系统没有能力在一秒钟抓取30帧时,就会出现问题,为此我又写了 ...

最新文章

  1. 打印机在计算机里被删掉,不小心把设置里打印机删掉了怎么办
  2. Mozilla 财报:2017年收入增长超过 4000 万美元
  3. linux ssh 远程登陆 报错 software caused connection abort 解决方法
  4. hyperledge环境安装
  5. jquery.ui.draggable中文文档jquery 自由拖拽类~study~
  6. gradle maven_将工件从Gradle自动提升到Maven Central
  7. Linux服务器版本鼠标,安装GPM给Linux虚拟控制台提供配置鼠标支持
  8. Android RecyclerView 滑动到指定位置 RecyclerView 滑动到顶部
  9. matlab中的种子数seed,set.seed()设置种子到底是啥作用?
  10. Windows 的开发好痛苦
  11. java swing有趣编程_java(swing编程)如何这个简单效果?
  12. yolov5-6.0 出现Arial.ttf无法下载问题解决办法
  13. 三星董事长去世享年78岁,临终前最为遗憾的一件事
  14. android 测光模式,Android摄像头:设置测光点位置
  15. 哈啰电动车,未来可期
  16. 日常生活中使用的台式计算机,台式电脑鼠标不动应该怎么办
  17. 在浏览器端浏览EPUB
  18. Blender 建模案例一(2)
  19. 基于web的商场商城后台管理系统
  20. postgresql数据库字节流类型详解

热门文章

  1. 美元汇率【贪心算法练习题】
  2. 汽车厂商 API数据接口
  3. python 爬虫 金山词霸每日一句 优美的文段中英文爬取自编
  4. node批量修改文件扩展名
  5. stm32LL库串口空闲中断+DMA接收
  6. Kubernetes基本概念和术语
  7. matlab双线性变换切比雪夫2,语音信号滤波去噪——使用双线性变换法设计切比雪夫II型.doc...
  8. 《C++ Primer中文版(第五版)》 第九章 顺序容器
  9. python3中import time是什么意思_python3_time模块详解
  10. 家用wifi能查到浏览记录吗_2020最好用的行车记录仪推荐