Ada banyak file audio di alam liar yang dikodekan dengan VBR yang tidak memiliki tag durasi yang akurat, dan baris perintah FFMpeg akan menampilkan yang berikut:

Memperkirakan durasi dari bitrate, ini mungkin tidak akurat

(dan memang, itu)

Menggunakan libav, kita dapat melihat bahwa ini diuji dengan fungsi has_duration() dari libavformat/utils.c

Saya memiliki pemutar audio yang perlu mendapatkan informasi durasi yang akurat menggunakan libav. Saya telah mencoba sepenuhnya mendekode file dan menghitung jumlah total sampel yang didekodekan yang merupakan rekomendasi biasa (dan akurat), tetapi ini dapat memakan waktu 10+ detik pada file audio 60 menit, yang tidak dapat diterima.

Saya perhatikan bahwa ada beberapa dekoder audio sumber tertutup dan aplikasi pemutar musik yang bisa mendapatkan durasi akurat untuk file-file ini dengan segera. Pasti ada cara murah untuk menentukan durasi yang akurat? Mungkin cuplikan atau deskripsi tingkat tinggi akan membantu saya.

3
Steve M 12 Maret 2020, 21:50

1 menjawab

Jawaban Terbaik

Dimungkinkan untuk "demux" trek dengan sangat cepat dan memeriksa durasi setiap paket untuk menentukan total durasi trek, decoding tidak diperlukan.

Cukup tambahkan durasi dalam satu lingkaran hingga EOF tercapai:

int read = av_read_frame(pFormatCtx, packet);
durationSeconds = packet->duration * (double) timebase;
2
Steve M 15 Maret 2020, 01:06