简单总结一下这几天的工作ffmpeg

 

简单总结一下这几天的工作
BY xiaoxiongli

这几天主要用ffmpeg对原始的音频流和视频流进行压缩,视频流的格式是gbr24,音频流的格式是pcm的
就压缩成geuss_format("avi")里面描述的那种格式,没仔细看这个函数,大概就是视频数据压缩成mpeg4,
看了看二进制的数据,关键字好像是FMP4。音频压缩成mp2/mp3?没搞清楚是2还是3,恩,应该是3吧。

视频压缩非常顺利,代码写好了后编译,运行,直接就好了,只不过把gbr搞成了rgb,颜色不对了,改过来就好了。

可是avi文件中的音频就惨不忍睹了,只有大概1s的音频吧,而且根快进一样的,听不清楚。

分析一下为什么?
最后lsosa兄一语道破玄机:音频数据丢了一部分。

于是我采取不压缩音频只压缩视频的方式,正常。(要把output buf size 根据自己的需要改大!!!)

然后我兴冲冲的将out buf size改大后,然后再××,结果并没有改善。

然后我就监视了一下pts这个东东,发现在output examples。c中这个值是一直增大,直到5,而在我的程序中没有变化一直是零。(到现在这个问题还不知道是怎么回事???,那个函数控制pts增加???)

结果改了半天,pts还是纹丝不动。

无意间,监视了一下pkt。size发现其只有209字节大小,仔细想了一下,对于mp3压缩率为12:1,可是我的数据为44100×2×2这样算下来压缩率足足有800多,显然有问题。

原因找到了,开始找解决办法:
1:修改c->frame_size,使其等于44100。(原来为1152)
失败

2:仔细思索为啥为1152?ffmpeg系统似乎不允许非1152的mp3编码?
查阅了mp3的相关资料,得到答案:“mp3放入的声音数据分成帧,每帧包含1152个样本数据,……”,看到这里终于明白了音频帧的概念,原来在相当长的一段时间搞不明白这个概念。

那该如何修改呢?
我想了两种办法:
在存avi文件的时候,加一个循环,循环38次刚好就是1s的音频数据,1152×38 = 44100
结果这样试了一下,发现解码的时候音频不对,模糊不清,只能听见声音高低。失败
存放格式如下:VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVVVVVVVVVVAV

直接按1152为一帧进行存放,即AVAVAAV.。。,这样试了一下,结果一切正常,到此成功。

TODO:
       搞清楚pts为啥一直为0;
       想办法把这个压缩后的avi文件通过网络发送,达到类似vod的效果。
       用Qt做一个界面。
       想办法移植到嵌入式系统中去。

该忙其他的了。

感谢admin兄和lsosa兄

你可能感兴趣的:(简单总结一下这几天的工作ffmpeg)