使用ffmpeg库

时间:2015-07-06 09:48:24

标签: c++ audio encoding ffmpeg wav

我有一个指向堆上解码帧的stl队列 (例如decode_queue<AVFrame *>)  我想从stl队列中获取这些帧并以WAV格式对它们进行编码。当我尝试将编码器更改为pcm_s32le / pcm_s16le时,我尝试使用ffmpeg附带的示例。例如对于decode_encoding.c的例子,我只是试图改变一些参数,突然间我得到一个浮点异常。 有什么我可以做的吗?我真的迷路了。

更新 在decoding_encoding.c中我更改了行:

codec = avcodec_find_encoder(AV_CODEC_ID_MP2);

codec = avcodec_find_encoder(AV_CODEC_ID_PCM_S16LE);

此更改最终导致c->frame_size == 0因此永远不会创建缓冲区:

buffer_size = av_samples_get_buffer_size(NULL, c->channels, c->frame_size, c->sample_fmt, 0);

在这种情况下,而不是行:

frame->nb_samples = c->frame_size;

我把它改成了

frame->nb_samples = 10000

buffer_size = av_samples_get_buffer_size(NULL, c->channels, 10000, c->sample_fmt, 0);

只是看看会发生什么(基本上取代c->frame_size为10000)。它编译但它创建了一个输出文件,但播放器无法找到它的流或它充满了垃圾。此时我仍然不知道该怎么做才能获得output.WAV文件。

此外,是自动添加RIFF标头还是我必须手动添加它?

0 个答案:

没有答案