如何在Linux采集视屏和语音

如何在Linux采集视屏和语音,第1张

格式转换(将file.avi转换成output.flv)C代码#ffmpeg-ifile.avioutput.flv-i表示输入文件:现在有个视频video.avi,有个音频audio.mp3,将其合并成output.avi两个命令(file.avi是中间文件,用完可删)C代码#ffmpeg-ivideo.avi-vcodeccopy-anvideo2.avi#ffmpeg-ivideo2.avi-iaudio.mp3-vcodeccopy-acodeccopyoutput.avi-i表示输入文件-vcodeccopy表示forcevideocodec(‘copy’tocopystream)这个不知怎么译,估计是直接copy-acodeccopy这个说的应该是音频了跟上面一样-an:表示disableaudio估计是audiono之类的缩写,表示去掉video.avi原有的音频

如果要自己实现的话,那么第9步你能通过VIDIOC_DQBUF请求来获取到一帧视频。

如果你想存成AVI的,那么你得了解AVI文件格式。avi是一种RIFF的实现balabalabala......

总之你大概在初始化的时候就把avi的文件头写好(strh strl之类的,具体看手册),然后第九步

的时候取出一帧数据,把长度和偏移连同这帧数据写入文件,同时保存下索引。

当写入全部的视频帧后再把索引写入文件,最后关闭录像文件,停止视频采集

如果觉得自己实现麻烦,就移植个ffmpeg啥的,直接支持v4l2和avi容器,一条命令就搞定了

源码中:

fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV

fmt.fmt.pix.field = V4L2_FIELD_INTERLACED

ioctl (fd, VIDIOC_S_FMT, &fmt)

指定了采集图像的格式为YUYV格式。

要像采集成JPEG图像,得查询一下摄像头是否有相应功能,如果没有相应功能即使将fmt设置为jpeg最终采集到的还是yuyv格式。

yuyv可以转换为bmp数据,然后调用jpeglib库转换为jpg图像,稍稍有些麻烦,但没办法硬件不足就要用软件来弥补了。

至于你说的read没读到数据,我现在没有开发环境,没法测试。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7679128.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存