我是 ffmpeg 的新手。当某些媒体具有多个音频流时,我遇到问题。
假设在MKV文件中,它有三个音频流(MP3、WMA和WMAPro)
使用以下命令进行解复用时如何更改流索引:
AVPacket inputPacket;
ret = av_read_frame(avInputFmtCtx, &inputPacket)
所以我正在搜索类似change_stream_index(int streamindex)的东西,当我调用该函数时(假设change_stream_index(2)),对av_read_frame的下一次调用将解复用WMAPro帧而不是MP3。
多谢你们!
我今天遇到了同样的问题,在我的例子中,我处理一个包含 80 个曲目的 mp4 文件,显然,如果您只需要解复用单个曲目,您不希望每次处理单个曲目时跳过最多 79 个数据包来自选定流的数据包。
我的解决方案是设置discard
我不感兴趣的所有流的属性AVDISCARD_ALL
。例如,为了仅选择索引为 71 的单个流,您可以执行以下操作:
int32_t stream_index = 71;
for(int32_t i = 0; i<pFormatContext->nb_streams; i++)
{
if(stream_index != i) pFormatContext->streams[i]->discard = AVDISCARD_ALL;
}
之后你可以打电话av_seek_frame
or av_read_frame
并且只处理第 71 条磁道。
仅供参考,以下是所有可用丢弃类型的列表:
AVDISCARD_NONE =-16, ///< discard nothing
AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi
AVDISCARD_NONREF = 8, ///< discard all non reference
AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
AVDISCARD_NONINTRA= 24, ///< discard all non intra frames
AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
AVDISCARD_ALL = 48, ///< discard all
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)