Караоке - это музыкальная система, которая проигрывает записанное сопровождение популярной песни. Исполнитель поёт песню вживую, обычно следуя за словами на видеэкране. Слово также обозначает само такое выступление.
Японское слово образовано из kara, что значит «пустой», и сокращения от слова «оркестр». В прямом переводе karaoke означает «пустой оркестр».
В отчёте о метаданных Karaoke - это поле с более узким значением. Название взято из ffprobe, программы чтения файлов в проекте FFmpeg.
FFmpeg считает каждую часть файла отдельным потоком. Каждый поток получает набор флагов, называемый disposition, например Karaoke и Attached Pic. Документация FFmpeg описывает этот флаг в нескольких словах: поток содержит аудио караоке.
Как выглядят значения
Параметр -show_streams в программе ffprobe выводит этот флаг для каждого потока, даже в файлах без музыки. В этом выводе флаг имеет 2 значения:
0: флаг выключен1: флаг включён, поток помечен как аудио караоке
Точный вид зависит от отчёта. В JSON-отчёте отображается "karaoke": 0, а в текстовом отчёте - DISPOSITION:karaoke=0.
Какие файлы его содержат
FFmpeg читает и записывает этот флаг для одних форматов, но не для других, как показывают следующие примеры:
- NUT: поток может сохранять слово
karaokeв теге с именемDisposition - MKV: спецификация Matroska содержит флаги, такие как default, forced и commentary, но нет флага karaoke
- MP4: в списке ролей дорожек MP4 в FFmpeg нет записи karaoke
- Аудио AC-3 и E-AC-3: в аудиоданных есть тип сервиса, и одно из значений обозначает караоке
FFmpeg преобразует тип сервиса караоке в флаг, когда аудио имеет 2 и более каналов, в том числе в файле MKV или MP4. Для других аудиоформатов поток в файле MKV или MP4 обычно показывает 0, даже если песня является караоке-версией.
Некоторые караоке-песни используют собственный тип файла. Библиотека Конгресса указывает расширение kar для MIDI-файлов караоке.
Где хранятся слова песни
Флаг Karaoke не содержит слов, только число 0 или 1. В FFmpeg есть отдельный флаг Lyrics для потока с текстом песни. Сам текст хранится в разных местах для разных форматов:
- MP3: кадр ID3v2 USLT хранит текст песни без тайминга, а кадр SYLT сохраняет временную метку для каждого слога или фрагмента текста
- MKV: тег
LYRICSхранит слова, когда их тайминг не известен, или как копию дорожки субтитров
Откуда берется значение
FFmpeg устанавливает флаги при создании каждого потока или позже, при его анализе. Для файла NUT FFmpeg читает флаги из тега Disposition. Для аудио AC-3 FFmpeg читает тип сервиса из аудиоданных.
С параметром FFmpeg -disposition вы можете задать этот флаг сами. По умолчанию FFmpeg копирует флаги из входного потока в выходной.
Флаг, который хранится только в контейнере, попадёт в новый файл, только если новый формат может его сохранить. Модуль записи FFmpeg для MKV не содержит кода для этого флага.
Почему это важно
Файл может содержать несколько аудиопотоков, и этот флаг может помечать один из них как аудио караоке. В командах FFmpeg селектор потоков disp:karaoke выбирает потоки с этим флагом.
Флаг является только меткой и не доказывает, что вы слышите. Значение 0 не доказывает, что у песни нет караоке-версии или что у неё нет текста.