gpt4 book ai didi

linux - amr 音频文件的持续时间

转载 作者:太空宇宙 更新时间:2023-11-04 04:30:33 25 4
gpt4 key购买 nike

我想查找“amr”类型的音频文件的持续时间,而不将其转换为其他音频格式有什么办法吗?

AK

最佳答案

我在 Objective-C 中编写了以下代码来获取电影的时长。这也可以类似地用于获取音频的持续时间:

-(double)durationOfMovieAtPath:(NSString*)inMoviePath
{
double durationToReturn = -1;

NSFileManager *fm = [NSFileManager defaultManager];
if ([fm fileExistsAtPath:inMoviePath])
{
av_register_all();

AVFormatContext *inMovieFormat = NULL;
inMovieFormat = avformat_alloc_context();
int errorCode = av_open_input_file(&inMovieFormat, [inMoviePath UTF8String], NULL, 0, NULL);
//double durationToReturn = (double)inMovieFormat->duration / AV_TIME_BASE;

if (0==errorCode)
{
// only on success
int numberOfStreams = inMovieFormat->nb_streams;
AVStream *videoStream = NULL;
for (int i=0; i<numberOfStreams; i++)
{
AVStream *st = inMovieFormat->streams[i];

if (st->codec->codec_type == CODEC_TYPE_VIDEO)
{
videoStream = st;
break;
}
}

double divideFactor;
// The duraion in AVStream is set in accordance with the time_base of AVStream, so we need to fetch back the duration using this factor
divideFactor = (double)1/rationalToDouble(videoStream->time_base);

if (NULL!=videoStream)
durationToReturn = (double)videoStream->duration / divideFactor;
//DEBUGLOG (@"Duration of movie at path: %@ = %0.3f", inMoviePath, durationToReturn);
}
else
{
DEBUGLOG (@"avformat_alloc_context error code = %d", errorCode);
}

if (nil!=inMovieFormat)
{
av_close_input_file(inMovieFormat);
//av_free(inMovieFormat);
}
}

return durationToReturn;
}

CODEC_TYPE_VIDEO 更改为 CODEC_TYPE_AUDIO,我认为它应该适合您。

关于linux - amr 音频文件的持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com