所以我在 AAC 编码方面遇到问题。我正在尝试对一些合成声波进行编码,但它无法按预期工作。我得到的文件在 VLC 中播放时只发出超短的声音。当我在 ffplay 中播放时,它会像我预期的那样播放,但它显示“持续时间:00:00:00.05”,我想这表示 5 毫秒。但我编码的内容远不止这些,而且播放的内容也更多。所以VLC播放超短的声音,ffplay播放较长的文件(预期长度),但显示的持续时间超短,这是怎么回事?
来源:http://pastebin.com/M5MKkEL3
我认为错误的一件事是: 如果你寻找变量“audio_time”,如果你断点它并在每个编码帧读取它,你会得到这个:
..
编码帧 8:0.00010416666666666666
编码帧 9:0.00012500000000000000
(等等)
差异是:~0.00002085,这是我预期每秒大约 47 个样本帧的差异的 1/1000,这是编码器想要的 48k 采样率 (48k/1024 = ~47)。
那么为什么我会得到一千个预期的编码数据?
请随时指出任何可疑的地方!
提前致谢!
最佳答案
所以我发现它,在第 75 行,缺少这个:
time_base.num = per_frame_audio_samples;
time_base.den = aud_codec_context->sample_rate;
aud_codec_context->time_base = time_base;
在我的例子中,per_frame_audio_samples = 1024。
关于c - 使用 ffmpeg 进行 aac 编码会产生超短文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41273273/