FFmpeg音频转码总结

来源:互联网 发布:git ssh 端口 编辑:程序博客网 时间:2024/06/05 12:40

最近自己在做音频转码的事情。刚开始是想通过ffmpeg的示例程序来学习,可是比较复杂,短时间内看的头昏脑胀。索性在网上搜索关于转码的例子。还是在雷神的博客里找到了类似的示例程序,地址是:http://blog.csdn.net/leixiaohua1020/article/details/26838535

这个示例程序是调用ffmpeg中aviflter的模块来进行做的。进行转码只是avfilter的一部分功能,关键的规则是滤镜规则,这个是没有用到的。ffmepg音频规则的描述是: filter_spec = "anull"(意思是对音频数据不进行任何操作);视频的话是: filter_spec = "null";作用是相同的。之前我找不到如何使用滤镜规则,其实关键点就在于filter_spec内,用来描述如何使用滤镜规则的。滤镜规则先说到这吧,还是先进行转码吧。

之后自己进行尝试,是进行转码的,不是只是适用几种(mp3,aac,wav等)的音频格式。使用另外一些音频转码的时候,会出现 more samples than frame size (avcodec_encode_audio2)  的问题。究其原因,还是在于转码前后,音频文件中采样个数的不同。在网上搜索解决办法,显示的都是调用ffmpeg中fifo管道来做。官网上有相应的示例程序(transcode_acc.c)。网上的做法是resample模块+fifo管道来做的,可是自己先前是调用ffmepg中avfilter模块来做的。自己想了一个办法, 把要转码的文件先解码塞进管道,然后resample,之后放入avfilter来处理,然后取出数据在进行编码。可是,行不通。当自己重采样之后, 把数据放入avfilter中的时候,出现错误:不能对解码的数据进行resample。自己又白忙活了,之后,还是决定重新利用官网上的例子来做,放弃了avfilter模块的示例程序。

自己先尝试跑通程序,可是老是出现错误,自己开始怀疑官网的示例程序是否可行。之后,实在是编译不同,没办法,利用这种思想自己来写程序。之后,自己倒是写出来了,程序试跑没问题没有出现之前的的问题。说明程序还是可行的,可是老是编译官网程序通不过,有点郁闷。

大体上,自己使用ffmpeg进行转码也就到此为止了。希望对大家有帮助吧。

总结一下,通过这次的锻炼发现,要解决问题,还是先百度一下为好。

第一,毕竟肯定有人做过的,至少大致的思路不会错,如果思路错了,那就会耗费很长时间的。之前,自己专研ffmpeg.c的源码,看的是头昏脑涨,既浪费时间,又浪费精力,在网上查找的不到半天,就找到了解决的办法了。

第二,很多东西,都是从陌生到熟悉的,所以自己得慢慢地自己摸索,然后慢慢熟悉。还要,切记一点,要尽可能的理解程序源码,只有彻底理解了,才不会出现理解上的偏差,之前自己就是只图个理解的大概,所以程序老是小问题不断,大问题没有,这是作为程序员不应该有,不雅怕浪费时间。