
[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

Залишити відповідь
Щоб відправити коментар вам необхідно авторизуватись.