DirectShow捕获+mencoder+ffmpeg+sox 打造小巧的音视频制作、加工软件

简介: DirectShow捕获+mencoder+ffmpeg+sox 打造小巧的音视频制作、加工软件

打造小巧的音视频制作、加工软件

  捕获音视频并进行加工处理,是常见的应用。录制一段小视频,加上广告,贴上字幕,再搞点音乐什么的,可以上传到视频网站上去,不管是做营销宣传,还是纯粹的娱乐目的,都很常见。当然,你可以使用市面上的很多的视频处理软件,不过,很多需要收取较高的费用或者需要破解,搞不好还会中毒。而事实上你可能只需要其中的一部分功能,而有的需求则需要使用几款软件同时合作才能实现。这个时候,做一下软件定制,搞一个完全符合自己需求的软件,不仅省去了诸多麻烦,使用起来也会得心应手、事半功倍。

  本人最近做了一个小软件,实现音视频捕获,然后进行轻度的加工处理,功能不多,但是简单、易用,最重要的是完全符合客户的需求。既然是小项目,没有必要做深层的音视频编码和格式封装,而且客户也没有那么高的需求,因此,充分的利用开源程序,是最恰当的方式。这里和大家分享一下经验。

主要需求:

1. 采集摄像头和麦克风,并生成文件

2. 为录制的视频添加字幕

3. 为录制的视频背景音乐,背景音的音量要能调节

4. 添加片头和片尾

5. 最终生成的文件体积要小,方便上传至视频共享网站(优酷、土豆等)

  需求比较简单,就这几项,但如果真的从轮子造起,那就不知道要造到猴年马月了。先上一张产品照,养养胃口:

技术分析

  1. 首先是音视频捕获,可以采用DirectShow技术(说到DirectShow,需要说明一下,我使用的是Windows SDK 7.1所带的dshow,有些人用的是dx9中的dshow,我没有对比区别)。因为这里不是做直播或监控,所以没必要实时对每一帧做处理,所以决定不采用SampleGrabber的回调形式,直接让它生成AVI文件,然后再做处理。这里因为我们还想做预览,所以需要对视频做两次RenderStream。对了,别忘了还有音频哦:)。

 

 

  2. 因为需要到要上传,所以需要对采集后的视频文件做编码处理,直接调用ffmpeg即可,可以把你几百MB的采集视频压缩为1MB。这里不采用mencoder,因为它似乎对avi文件的处理有问题。考虑到之后要添加背景音,为了保证背景音和麦克风同时存在,需要抽取音频单独处理,同样是调用ffmpeg,这里把代码列上,相信你在其他地方也能用的上:

 

  3. 音频处理,就是调用sox了。它是个好东西啊,不仅可以做音频的合并、分割,也能做混音和音量调节,这就是选择它的原因。注意,音量调节是针对原始音乐的,-v 传入的参数,指的是针对原始音量的调整幅值。大于1为增大音量,小于1减小音量,负数表示还需要对音频进行反相变换。sox还能做其他的声音处理效果,大家可以自己Google之。

  4. 添加字幕。需要调用mencoder,因为我对它进行了封装,这里不方便展示,只把字幕相关的参数列出来,以供参考。其中-subfont-text-scale后面的参数是字体的大小,-subfont参数输入的是字体文件的绝对路径,一般是C:\WINDOWS\Fonts\中的文件。

-subcp cp936 -sub-fuzziness 1 -subfont-autoscale 3 -subfont-text-scale %d -subfont-blur 2 -subfont-outline 2 -subfont %s

  5. 添加片头片尾,也就是视频合并了。合并的前提是它们的编码要一致,所以有必要对它们进行重新编码,按照录制后视频的处理方式进行处理。我把它们都转换成了mp4文件,然后就可以很方便的合并了。mp4合并是我之前就已经写好的程序,直接拿来用了。如果你没有,可以调用mp4box来做这件事情。参数我直接贴上了,大家就不用再找了。顺便说一句,如果你发现你的mp4文件存在同一时刻的音频帧和视频帧相距较远,导致网络播放时无法快起的问题,也可以用mp4box来解决:

 

mp4box.exe -cat input_1.mp4 -cat input_2.mp4 out.mp4

 

  基本上,主要技术就是这些了,毕竟是定制项目,不方便完全贴出来。下面贴几张处理后的效果图:

目录
相关文章
|
4月前
|
编解码
项目实战——Qt实现FFmpeg音视频转码器(二)
项目实战——Qt实现FFmpeg音视频转码器(二)
89 0
|
4月前
|
编解码 编译器
项目实战——Qt实现FFmpeg音视频转码器(一)
项目实战——Qt实现FFmpeg音视频转码器(一)
105 0
|
11天前
|
Android开发 计算机视觉 C++
FFmpeg开发笔记(五十一)适合学习研究的几个音视频开源框架
音视频编程对许多程序员来说是一片充满挑战的领域,但借助如OpenCV、LearnOpenGL、FFmpeg、OBS Studio及VLC media player等强大的开源工具,可以降低入门门槛。这些框架不仅覆盖了计算机视觉、图形渲染,还包括多媒体处理与直播技术,通过多种编程语言如Python、C++的应用,使得音视频开发更为便捷。例如,OpenCV支持跨平台的视觉应用开发,FFmpeg则擅长多媒体文件的处理与转换,而VLC media player则是验证音视频文件质量的有效工具。
35 0
FFmpeg开发笔记(五十一)适合学习研究的几个音视频开源框架
|
1月前
|
Web App开发 5G Linux
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
一年一度的毕业季来临,计算机专业的毕业设计尤为重要,不仅关乎学业评价还积累实战经验。选择紧跟5G技术趋势的音视频APP作为课题极具吸引力。这里推荐三类应用:一是融合WebRTC技术实现视频通话的即时通信APP;二是具备在线直播功能的短视频分享平台,涉及RTMP/SRT等直播技术;三是具有自定义动画特效及卡拉OK歌词字幕功能的视频剪辑工具。这些项目不仅技术含量高,也符合市场需求,是毕业设计的理想选择。
60 6
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
|
18天前
用ffmpeg提取合并音视频
用ffmpeg提取合并音视频
|
2月前
|
达摩院 语音技术 异构计算
语音识别-免费开源的语音转文本软件Whisper的本地搭建详细教程,python版本是3.805,ffmpeg是专门处理音视频的,ffmpeg的下载链接,现在要求安装python和ffmpeg
语音识别-免费开源的语音转文本软件Whisper的本地搭建详细教程,python版本是3.805,ffmpeg是专门处理音视频的,ffmpeg的下载链接,现在要求安装python和ffmpeg
|
3月前
|
存储 编解码 Linux
rodert教你学FFmpeg实战这一篇就够了 - 音视频处理入门篇
rodert教你学FFmpeg实战这一篇就够了 - 音视频处理入门篇
46 1
|
2月前
|
C#
C#进程调用FFmpeg操作音视频
因为公司需要对音视频做一些操作,比如说对系统用户的发音和背景视频进行合成,以及对多个音视频之间进行合成,还有就是在指定的源背景音频中按照对应的规则在视频的多少秒钟内插入一段客户发音等一些复杂的音视频操作。本篇文章主要讲解的是使用C#进程(Process)调用FFmpeg.exe进行视频合并、音频合并、音频与视频合并成视频这几个简单的音视频操作。
|
4月前
|
存储 缓存 调度
FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频
《FFmpeg开发实战》第10章示例playsync.c在处理音频流和视频流交错的文件时能实现同步播放,但对于分开存储的格式,会出现先播放全部声音再快速播放视频的问题。为解决此问题,需改造程序,增加音频处理线程和队列,以及相关锁,先将音视频帧读入缓存,再按时间戳播放。改造包括声明新变量、初始化线程和锁、修改数据包处理方式等。代码修改后在playsync2.c中,编译运行成功,控制台显示日志,SDL窗口播放视频并同步音频,证明改造有效。
77 0
FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频
|
4月前
|
编解码 安全 计算机视觉
FFMPEG常用命令 音视频合并
FFMPEG常用命令 音视频合并
101 2