好吧,这是真正开始记载的第一篇blog,上一篇中,我英语并不太好的,只是接着兴奋感立马发了一篇试试哈哈。

很好,那就说一下我学ffmpeg的目的吧。

我的目的是去开发一个galgame engine,但我最早开始学习的并不是图形api,也不是游戏引擎架构,而是音频引擎的部分。最早是大三时候开始在archlinux上用bass引擎和ncurses来开发一个个人用的基于键盘控制的音频播放器,这也是我第一次写gui的程序(好吧应该是tui)。之后在24年年初那段时间,在windows上用xaudio2和libsndfile来尝试写个音频引擎,3d部分还没涉及,但中途有不少问题。

比如libsndfile无法正确读取一些mp3文件,但我用minimp3可以(哦对了,一开始并没有直接用libsndfile,而是先用一堆库,minimp3,libvorbise之类去写,但结果写到flac的时候卡住了,进展不下去才开始换别的方法使用了libsndfile)。

还有libsndfile本身并没有效果链(effect chain,是这么叫嘛),所以我想实现音频平缓切换要手动实现淡入淡出,虽然说可以通过直接改变音量来实现淡入淡出,但我自己使用的效果,淡入淡出的延迟太大了,几百ms的那种,我希望这个效果几乎察觉不到,就只是很丝滑的,没有杂音的过渡而已,然后就开始尝试手动更改样本值来实现淡入淡出。实现的效果还不错,但在24bit的样本处理中有点儿问题,会有未查明的bug,所以也卡来这里了。

libsndfile无法完美处理绝大多数的音频文件之后,我又试了试别的库,目前仍在用的是fmod。但fmod在有时使用中会有卡顿的效果,就是偶尔切歌的时候,两周可能遇到一两次的那种,不知道是我程序写的问题还是fmod的问题(虽然很大概率是我程序写的不精吧,但实际上使用fmod也无非调用几个api直接控制播放之类,也没太复杂的情况,也不知道是什么原因。。。)

好吧,终于到ffmpeg了,虽然久仰ffmpeg大名,但奈何本人技术辣鸡,无法仅通过官方doc以及那几个examples就学会使用,网上很推荐的ffmpeg学习的github,用的库也有些旧了,而且我学习途中也各种问题没学下去(很大一部分原因是我只想学音频的部分,而绝大多数教程都是先讲ffmpeg的使用,然后是讲视频的,音频只是一小部分)。这种原因之下,我学习ffmpeg折腾了两回都没成功(图形API也是,opengl,dx11,dx12,vulkan折腾来折腾去的,不过目前已经先稳定在dx12,之后dx12的篇幅我再讲吧)。

总之,在各种各样的契机之下,我终于在这个时候开启了我第三次ffmpeg的学习,而且正好赶上我开始写blog的时候,因此来记载一下。

国内还是有很多不错的教学内容的我之前都没注意过。。。所以这次明明是第三次,却是第一次使用国内的教程来学习的。

祝我旅途愉快!哈哈

教程使用的资源(Resources)

【音视频】FFmpeg音视频入门到精通+实战课

什么b站大学,哈哈。慕课网最有用的一次 注意: 这个课程使用的ffmpeg版本,在7.1版中的一些API已经不可用,需要注意

Tags:

Categories:

Updated: