[JCAIGC]Get the duration of audio files

від

у

[JCAIGC] Отримайте тривалість аудіофайлів

https://ift.tt/UDY6wzm

Документація API get_audio_duration

Огляд API

Назва API: get_audio_duration

URL для API: POST /openapi/capcut-mate/v1/get_audio_duration

Опис функції: Отримання тривалості аудіофайлів, підтримуються різні загальні формати аудіо. Використовує інструмент FFprobe для точного аналізу аудіо, повертаючи точну тривалість аудіофайлів в мікросекундах.

Додаткова документація

📖 Для більш детальної документації та навчальних посібників, будь ласка, відвідайте: https://docs.jcaigc.cn

Параметри запиту

Тіло запиту (application/json)

Параметр

Тип

Обов’язковий

За замовчуванням

Опис

mp3_url

рядок

Так

URL-адреса аудіофайлу, підтримує загальні формати аудіо такі як mp3

Опис параметра

mp3_url: Повна URL-адреса аудіофайлу

Підтримувані формати: mp3, wav, aac, flac та інші загальні формати аудіо

Необхідно переконатися, що URL доступний і файл є повним

Рекомендований розмір файлу не перевищує 100МБ

Приклади запитів

Отримати тривалість MP3 файлу

{
“mp3_url”: “https://ift.tt/XDtCmTH”
}

Отримати тривалість WAV файлу

{
“mp3_url”: “https://ift.tt/AUPOJZ3”
}

Формат відповіді

Успішна відповідь

{
“duration”: 120000000
}

Опис полів відповіді

Поле

Тип

Опис

duration

ціле число

Тривалість аудіо, одиниця: мікросекунди. Приклад: 120000000 представляє 120 секунд (2 хвилини)

Перетворення одиниць тривалості

Мікросекунди в секунди: duration ÷ 1,000,000

Мікросекунди в мілісекунди: duration ÷ 1,000

Приклади:

120000000 мікросекунд = 120 секунд = 2 хвилини

30000000 мікросекунд = 30 секунд

5000000 мікросекунд = 5 секунд

Помилка відповіді

400 Помилка запиту – Помилка перевірки параметрів

{
“error”: {
“code”: “VALIDATION_ERROR”,
“message”: “Перевірка параметрів запиту не вдалася”,
“details”: “параметр mp3_url не може бути порожнім”
}
}

500 Внутрішня помилка сервера – Не вдалося отримати тривалість аудіо

{
“error”: {
“code”: “AUDIO_DURATION_GET_FAILED”,
“message”: “Не вдалося отримати тривалість аудіо”,
“details”: “Не вдалося завантажити аудіофайл або підтримуваний формат файлу”
}
}

Опис кода помилки

Код помилки

HTTP статус-код

Опис

Рішення

VALIDATION_ERROR

400

Перевірка параметрів запиту не вдалася

Перевірте, чи правильно надано параметр mp3_url

AUDIO_DURATION_GET_FAILED

500

Не вдалося отримати тривалість аудіо

Перевірте, чи доступний URL аудіо і чи підтримується формат файлу

Інструкції щодо використання

Вимоги до параметрів

параметр mp3_url: обов’язковий параметр, необхідно надати повну URL-адресу аудіофайлу

Формат файлу: хоча ім’я параметра є mp3_url, насправді підтримуються кілька форматів аудіо

Розмір файлу: рекомендується контролювати в межах розумного діапазону, великі файли можуть викликати тайм-аут обробки

Сценарії використання

Передобробка відео:

Отримати тривалість аудіо перед додаванням аудіо до проекту відео

Використовується для розрахунку розумної сегментації аудіокліпів

Управління аудіоматеріалами:

Пакетне отримання інформації про тривалість файлів в аудіотеках

Використовується для класифікації та фільтрації аудіоматеріалів

Синхронізаційна обробка:

Переконатися, що тривалість аудіо та відео збігається

Розрахувати тривалість ефектів затухання звуку

Технічний опис

Розрахунок тривалості: використовує інструмент FFprobe для точного аналізу аудіо

Точність: Повернена тривалість є високоточним фактичним значенням, підтримує точність до 6 знаків після коми

Продуктивність: Інтерфейс завантажить аудіофайл для аналізу, час обробки залежить від розміру файлу та швидкості мережі

Приклад коду

Приклад JavaScript

// Отримати тривалість аудіо
const getAudioDuration = async (audioUrl) => {
const response = await fetch(‘/openapi/capcut-mate/v1/get_audio_duration’, {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
},
body: JSON.stringify({
mp3_url: audioUrl
})
});

const result = await response.json();

if (response.ok) {
const durationSeconds = result.duration / 1000000;
console.log(`Тривалість аудіо: ${durationSeconds}секунд`);
return result.duration;
} else {
console.error(‘Не вдалося отримати тривалість аудіо:’, result.error);
throw new Error(result.error.message);
}
};

// Приклад використання
getAudioDuration(‘https://ift.tt/XDtCmTH’)
.then(duration => {
console.log(`Тривалість аудіо (мікросекунди): ${duration}`);
console.log(`Тривалість аудіо (секунди): ${duration / 1000000}`);
})
.catch(error => {
console.error(‘Помилка:’, error.message);
});

Приклад Python

import requests

def get_audio_duration(mp3_url):
“””Отримати тривалість аудіофайлу”””
url = ‘https://ift.tt/av7Nzrx’
data = {
‘mp3_url’: mp3_url
}

response = requests.post(url, json=data)
if response.status_code == 200:
result = response.json()
duration_microseconds = result[‘duration’]
duration_seconds = duration_microseconds / 1_000_000
return duration_microseconds, duration_seconds
else:
print(f”Запит не вдався: {response.status_code}”)
print(response.json())
return None

# Приклад використання
audio_url = “https://ift.tt/XDtCmTH”
duration_info = get_audio_duration(audio_url)

if duration_info:
duration_microseconds, duration_seconds = duration_info
print(f”Тривалість аудіо: {duration_seconds:.2f}секунд ({duration_microseconds}мікросекунд)”)

# Форматування тривалості
minutes = int(duration_seconds // 60)
seconds = int(duration_seconds % 60)
print(f”Сформатована тривалість: {minutes}хвилин{seconds}секунд”)

Приклад пакетної обробки

import requests
import json
from concurrent.futures import ThreadPoolExecutor
import time

def get_audio_duration_batch(audio_urls):
“””Пакетне отримання тривалості аудіо”””
def get_single_duration(url):
try:
response = requests.post(
‘http://localhost:8000/v1/get_audio_duration’,
json={‘mp3_url’: url},
timeout=30
)
if response.status_code == 200:
duration = response.json()[‘duration’]
return {‘url’: url, ‘duration’: duration, ‘success’: True}
else:
return {‘url’: url, ‘error’: response.json(), ‘success’: False}
except Exception as e:
return {‘url’: url, ‘error’: str(e), ‘success’: False}

# Конкурентна обробка
with ThreadPoolExecutor(max_workers=5) as executor:
results = list(executor.map(get_single_duration, audio_urls))

return results

# Приклад використання
audio_urls = [
“https://ift.tt/jTGy2Qt”,
“https://ift.tt/afw6PUv”,
“https://ift.tt/xiZKpD4″
]

results = get_audio_duration_batch(audio_urls)

for result in results:
if result[‘success’]:
duration_seconds = result[‘duration’] / 1_000_000
print(f”✓ {result[‘url’]}: {duration_seconds:.2f}секунд”)
else:
print(f”✗ {result[‘url’]}: {result[‘error’]}”)

Суміжні інтерфейси

add_audios – Пакетне додавання аудіо до чернетки CapCut

add_videos – Пакетне додавання відео до чернетки CapCut

easy_create_material – Швидке створення мультимедійних матеріалів

Технічна реалізація

Структура файлів

src/
├── schemas/get_audio_duration.py # Моделі даних запиту/відповіді
├── service/get_audio_duration.py # Реалізація бізнес-логіки
└── router/v1.py # Визначення маршруту API

Основна логіка

Перевірка параметрів: перевірка дійсності параметра mp3_url

Завантаження файлу: Завантажити аудіофайл за URL у тимчасовий каталог

Аналіз FFprobe: Використання інструменту FFprobe для отримання точних метаданих аудіо

Витягнення тривалості: Витягнення даних про тривалість з інформації про формат або інформації про потік

Очищення ресурсів: Очищення тимчасово завантажених файлів

Повернення відповіді: Повернення відповіді API відповідно до специфікацій

Актуальні реалізації функцій

Використовує інструмент FFprobe з проекту FFmpeg для аналізу аудіо

Підтримує кілька форматів аудіо (MP3, WAV, AAC, FLAC тощо)

Надає дані про тривалість з високою точністю (мікросекундний рівень)

Повний механізм обробки помилок та очищення ресурсів

Підтримує контроль тайм-аутів для запобігання тривалого блокування

Опис переваг

Порівняно з попереднім методом оцінки на основі розміру файлу, нова реалізація FFprobe забезпечує:

Вищу точність: Пряме читання тривалості з метаданих аудіо

Ширшу підтримку: Підтримує всі формати аудіо, які може розпізнати FFprobe

Більш надійні результати: Не покладається на оцінку бітрейта, безпосередньо читає фактичні дані

Інформація про версію: v1.0

Останнє оновлення: 2024-09-24

📚 Ресурси проекту

GitHub: https://ift.tt/lS5NrL0

Gitee: https://ift.tt/Ch0TznO

HI-FI новини

через DEV Community https://dev.to

28 листопада 2025 року о 10:05

November 28, 2025 at 10:05AM