FFmpeg 录制桌面、麦克风、摄像头
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 录制桌面、麦克风、摄像头相关推荐
- ffmpeg录制桌面视频和麦克风音频(音视频同步)
vs版本:2017 ffmpeg版本号: ffmpeg version N-102642-g864d1ef2fc Copyright © 2000-2021 the FFmpeg developers ...
- ffmpeg录制桌面(队列方式)
vs版本:2017 ffmpeg版本号: ffmpeg version N-102642-g864d1ef2fc Copyright © 2000-2021 the FFmpeg developers ...
- ffmpeg录制桌面(自己用gdi抓图)
之前写过两篇ffmpeg录制桌面,读者可以翻看我的博客,但是都存在着问题,尤其当一个进程里面,自己创建几个线程干其他事情时,出错概率大大增加, ret = avcodec_send_frame(pCo ...
- ffmpeg录制桌面,麦克风和系统声音独立成2路音轨
之前本人写过下面一篇博客: ffmpeg 本地麦克风声音和系统声音混音后,再混合本地桌面成最终的mp4文件-修正 里面的麦克风声音和系统声音利用滤镜进行了混音处理,昨天夜晚再想如果麦克风声音和系统声音 ...
- ffmpeg录制桌面视频和系统内部声音(音视频同步)
本文抓取的是电脑内部声音,需要先安装软件screen capture recorder,这个软件大小有50M,太大,安装后,里面有一个脚本文件,如下所示: 打开这个文件,可以看到如下内容: 这个文件比 ...
- ffmpeg gdi录制桌面视频时注意事项
本人之前写了一个博客:ffmpeg录制桌面(自己用gdi抓图) 当时设置的帧率是10,设置的比较低,原因在于,设置高了,1秒钟抓不到对应的图片数量,会导致最终生成文件播放起来,时间变短.比如设置帧率为 ...
- I.MX6 FFmpeg 录制视频
/************************************************************************** I.MX6 FFmpeg 录制视频* 说明:* ...
- C# ffmpeg 录制音视频
最近研究用ffmpeg录制桌面视频,以下是研究时碰到的问题以及成果记录下. FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录 ...
- ffmpeg录制系统声音,麦克风声音,桌面视频,并且桌面视频和声音分两个线程写
本人之前写过ffmpeg 本地麦克风声音和系统声音混音后,再混合本地桌面成最终的mp4文件-修正 这篇博客里面,如果设置抓取帧率为30帧,而系统没有能力在一秒钟抓取30帧时,就会出现问题,为此我又写了 ...
最新文章
- 打印机在计算机里被删掉,不小心把设置里打印机删掉了怎么办
- Mozilla 财报:2017年收入增长超过 4000 万美元
- linux ssh 远程登陆 报错 software caused connection abort 解决方法
- hyperledge环境安装
- jquery.ui.draggable中文文档jquery 自由拖拽类~study~
- gradle maven_将工件从Gradle自动提升到Maven Central
- Linux服务器版本鼠标,安装GPM给Linux虚拟控制台提供配置鼠标支持
- Android RecyclerView 滑动到指定位置 RecyclerView 滑动到顶部
- matlab中的种子数seed,set.seed()设置种子到底是啥作用?
- Windows 的开发好痛苦
- java swing有趣编程_java(swing编程)如何这个简单效果?
- yolov5-6.0 出现Arial.ttf无法下载问题解决办法
- 三星董事长去世享年78岁,临终前最为遗憾的一件事
- android 测光模式,Android摄像头:设置测光点位置
- 哈啰电动车,未来可期
- 日常生活中使用的台式计算机,台式电脑鼠标不动应该怎么办
- 在浏览器端浏览EPUB
- Blender 建模案例一(2)
- 基于web的商场商城后台管理系统
- postgresql数据库字节流类型详解
热门文章
- 美元汇率【贪心算法练习题】
- 汽车厂商 API数据接口
- python 爬虫 金山词霸每日一句 优美的文段中英文爬取自编
- node批量修改文件扩展名
- stm32LL库串口空闲中断+DMA接收
- Kubernetes基本概念和术语
- matlab双线性变换切比雪夫2,语音信号滤波去噪——使用双线性变换法设计切比雪夫II型.doc...
- 《C++ Primer中文版(第五版)》 第九章 顺序容器
- python3中import time是什么意思_python3_time模块详解
- 家用wifi能查到浏览记录吗_2020最好用的行车记录仪推荐