2010-04-23 4 views
1

Я загружаю аудиофайлы в asp.net с помощью FFMPEG. Мой вопрос в том, как я могу получить продолжительность файла (в секундах).Как получить длительность аудиофайла после загрузки с помощью FFMPEG

Пожалуйста, предложите мне.

Спасибо и наилучшие пожелания Шринивас M

ответ

0

Вот что я делаю, и он прекрасно работает для меня. Вызов

ffmpeg -i District9.mov 

Затем найдите длину видео в приведенном ниже фрагменте кода с регулярным выражением или простой проверкой string.startWith(" Duration:") типа:

Seems stream 0 codec frame rate differs from container frame rate: 5994.00 
(5994/1) -> 29.97 (30000/1001) 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/stu/Movies/District9.mov': 
    Duration: 00:02:32.20, start: 0.000000, bitrate: 9808 kb/s 
    Stream #0.0(eng): Video: h264, yuv420p, 1920x1056, 29.97tbr, 2997tbn, 5994tbc 
    Stream #0.1(eng): Audio: aac, 44100 Hz, 2 channels, s16 
    Stream #0.2(eng): Data: tmcd/0x64636D74 

Вы должны быть в состоянии последовательно и безопасно найти Duration: hh:mm:ss.nn и разобрать чтобы определить размер исходного видеоролика.

8

Почему вы хотите анализировать выходные данные? Вместо этого используйте FFMpeg API для получения продолжительности из аудиопотока файла. Нельзя полагаться на выходные строки, например, команда разработчиков решает изменить журналы в будущем. Поэтому используйте API для получения продолжительности.

Выполните следующие действия:

1. av_register_all(); 

2. AVFormatContext * inAudioFormat = NULL; 
    inAudioFormat = avformat_alloc_context(); 
    int errorCode = av_open_input_file(& inAudioFormat, "your_audio_file_path", NULL, 0, NULL); 

3. int numberOfStreams = inAudioFormat->nb_streams; 
    AVStream *audioStream = NULL; 
    for (int i=0; i<numberOfStreams; i++) 
    { 
     AVStream *st = inAudioFormat->streams[i]; 

     if (st->codec->codec_type == CODEC_TYPE_AUDIO) 
     { 
      audioStream = st; 
      break; 
     } 
    } 

4. double divideFactor; 
    divideFactor = (double)1/rationalToDouble(audioStream->time_base); 

5. double durationOfAudio = (double) audioStream->duration/divideFactor; 

6. av_close_input_file(inAudioFormat); 

Я гавань включены любые проверки ошибок в этом коде, вы можете решить это для себя. Надеюсь, это поможет.

Смежные вопросы