Вернуться в блог

Руководства / K6 · Форматы и совместимость

Одно и то же видео: компьютер воспроизводит, а телефон — нет. Контрольный список по слоям (у каждого слоя — реально снятые значения)

Если компьютер открывает файл, а телефон нет — причина обычно не в качестве и не в том, повреждён файл или нет. Прежде чем будет нарисован первый кадр, четыре слоя выносят суждение каждый сам; не пройдён любой из них — результат всегда один и тот же: «не открывается». Поэтому верный первый шаг — не брать другой инструмент и не пережимать заново, а прочитать файл и определить, какой слой вас и остановил.

1. До того как появится хоть один кадр, четыре слоя уже решили каждый своё

Эти четыре слоя оцениваются по отдельности, поэтому и симптомы отдельны: не тот контейнер — файл не открывается в принципе; не тот тег — открывается, но изображение не движется; не тот звук — открывается без звука; не то с субтитрами — фильм идёт как надо, а субтитров нет. Смешивать четыре симптома в «плохой инструмент» — самое частое место, где этот класс продуктов понимают неверно.

2. Первый шаг — прочитать файл, а не менять инструмент

Читаем слой за слоем: любой проверочный инструмент, способный перечислить внутреннюю структуру файла, отдельными строками выведет контейнер, имя кодека каждой дорожки, тег дорожки, глубину цвета, формат пикселей, длительность и число байтов. Этот шаг стоит несколько минут, а избавляет вас от последующих часов повторных проб.

Все значения ниже сняты в одном и том же проверочном прогоне на одной и той же машине; условия записаны в разделе 8.

ОбразецКонтейнерТег видеодорожкиПрофиль / формат пикселейРазмерЧисло байтов
Bmp4hev1Main 10 / yuv420p10le1920×108012,973,400
Cmp4hvc1Main 10 / yuv420p10le1920×108012,973,400

Оба файла сделаны из одного и того же двухминутного куска изображения, ни один кадр не был перекодирован, и число байтов совпадает до байта; единственная разница — тот самый четырёхсимвольный тег дорожки.

Смена расширения не трогает ни один из перечисленных слоёв; пережатие изображения с высоким битрейтом тоже не меняет тот слой, который вас остановил. Сначала определите, где заслон, — потом действуйте.

3. Слой тегов: одни и те же кадры — две записи

В контейнерах семейства MP4 HEVC декларируется как hvc1 или hev1. Разница в том, где записана конфигурация декодирования: hvc1 помещает её в описание сэмплов дорожки, и читающая сторона успевает настроить декодер ещё до первого кадра; hev1 разрешает передавать эти данные вместе с потоком. Тому, кому конфигурация нужна до начала работы, не стоит ждать, что она появится на полпути.

На этом слое не нужно заново сжимать ни один кадр: изображение уносится копированием, а заново пишется только тег дорожки. Пара образцов выше получена ровно так — один и тот же видеоряд записан дважды, результаты совпадают по длине побайтно.

Что стоит запомнить о цене этого слоя: это копирование, а не пережатие. Всё, что укладывается в границы этого слоя, не требует перекодирования.

4. Слой звука: безупречное изображение может застрять из-за одной аудиодорожки

Когда изображение уже принято, «пойдёт ли, будет ли звук» решают только аудиодорожки. Реальный набор форматов в этом семействе шире, чем принято думать: в одной и той же партии материалов встречались TrueHD, E-AC3, AC-3, Opus, FLAC, MP2, MP3, DTS и PCM.

ИсточникКонтейнерИзображениеЗвукРезультатЧто стало со звуком
GmatroskaHEVC Main 10TrueHDmp4 / hvc1Переписан в AAC (изображение не пережималось)
ImatroskaHEVC Main 10E-AC3mp4 / hvc1Унесён как есть (тег ec-3)

В обоих прогонах изображение не пережималось — вся разница в звуке: одну дорожку пришлось переписать, другая унеслась как есть. И ещё одно замечание, которое видно, только когда пересчитываешь дорожки по одной: проверка одной лишь первой аудиодорожки даёт файл, который открывается — и тонет в полной тишине. В многоязычном фильме нужный язык очень часто сидит именно на второй дорожке.

5. Слой субтитров: текст и картинка — два разных типа данных

ИсточникЗвукСубтитрыРезультатКуда делись субтитры
K (matroska)AC-3, Opus, AACSubrip, ASSmp4обе превратились в текстовые дорожки (mov_text / tx3g)
F (matroska)FLACHDMV PGS (картинка)—для картинки нет подходящего места в дорожке

Текстовые субтитры (SRT, ASS) переезжают в целевой контейнер текстом — размер и цвет шрифта по-прежнему менять вам. Растровые — те, что на Blu-ray сжаты постранично в картинки, как и субтитры DVD и записей с ТВ-приставок, — по сути фотографии субтитров. Дорожка субтитров в MP4 устроена под текст; для картинок в ней места нет.

Рабочих пути два: распознать текст из картинок и унести его как текст (распознавание — это способность, а не обещание: распознанные строки могут быть неточны, перед выдачей их стоит проверить) — либо расстаться с этими субтитрами. Изображение не сдвинется ни на пиксель, и текст в кадр вжигать не будут: такой способ дал бы новую видеодорожку, а не ваш исходный фильм.

Вопрос «поддерживаются ли субтитры» ничего не решает. Спрашивать надо иначе: эта дорожка — текст или картинка, и остаётся ли она тем же самым после конвертации.

6. Файл прочитать можно — устройство нельзя

Этот список доводит вас до ответа «какой слой править». Он не решает за вас, примет ли файл конкретное устройство: глубина цвета и профиль, цветовые метки, частота кадров, 4:2:2, длинные GOP получают ответ только на конкретном устройстве. Среди тех же образцов есть и Main 10, и Main 8, а цветовые метки на одних дорожках есть, на других нет — в файле эти различия читаются, а на устройстве становится видно, к чему они приводят.

7. Порядок проверки — идти по шагам

  1. Прочитать нутро. Контейнер, тег изображения, каждая аудиодорожка, каждая дорожка субтитров — всё в один прогон.
  2. Слой контейнера. Если файл не из той семьи, которую целевое устройство соглашается открывать, этого довольно, чтобы объяснить «не открывается в принципе», — даже когда изображение внутри совершенно.
  3. Слой тегов. Контейнер верный, изображение HEVC, но конфигурация не читается — сначала перепишите тег по разделу 3: это копирование, а не пережатие.
  4. Слой звука. Перечисляйте каждую аудиодорожку, не только первую; решить, какому языку стоять впереди, — осознанный выбор, а не случайность.
  5. Слой субтитров. Текст можно перенести; для картинки остаются только распознавание или отказ.
  6. Пережимать изображение — только в самом конце. Перекодирование нужно там, чему уже не поможет тег; это другая, более медленная работа, со своими пределами по объёму.

Если порядок неверный, на одном и том же устройстве один и тот же промах сделают трижды.

8. Откуда на этой странице значения и что мы делаем

Каждая цифра выше взята в одном проверочном прогоне на одной машине: Apple M2, macOS 27.2, проверочный инструмент командной строки 9.0.2. Образцы — из нашего собственного тестового набора. B и C переписаны копированием из одного и того же созданного нами видеоряда (исходник — наш собственный тестовый файл длиной две минуты: HEVC Main 10, 1920×1080, yuv420p10le, одна аудиодорожка AAC, при считывании 14,956,756 байта; B и C копируют его видео без единого изменения в два файла mp4, меняя лишь метку дорожки — размеры в байтах приведены в таблице выше); G–L — тестовые заготовки вокруг звуковых и субтитрных форматов эпохи дисков. Эта страница не рассылает никакие файлы-образцы — каждую из перечисленных структур можно воссоздать на ваших собственных материалах.

Мы делаем продукт для iPhone, iPad и Mac; результат всегда один контейнер — MP4. Никаких регуляторов битрейта, кодека или разрешения; решение, которое мы принимаем за вас, — одно из трёх: только сменить контейнер, сменить контейнер и переписать звук или перекодировать изображение. Файл, который и так воспроизводится напрямую, за конвертацию не считается: приложение не создаёт для него второй файл и не списывает счётчик. Платная форма — единовременная покупка (в продукте эта покупка называется Opus); она меняет только то, сколько раз конвертировать можно после неё, об этом написано здесь.

Частые вопросы

Можно ли просто переименовать .mkv в .mp4?

Нельзя, и этот шаг никогда не был сокращением пути. Расширение — лишь этикетка: её смена не переписывает структуру внутри контейнера и не меняет кодек изображения; когда устройство открывает файл, оно читает внутреннюю структуру, а не имя. От переименования вероятность «откроется» не меняется, зато вы теряете возможность разобраться, какой слой вас останавливает.

Если переписать только тег — файл станет чем-то совсем другим?

Нет. У пары образцов выше при обратном чтении получается ровно то же число байтов (у обоих 12,973,400), ни один кадр не пережат. В этом и ценность этого слоя: то, что решается копированием, не стоит пробовать перекодированием.

У моего фильма пять аудиодорожек — не останется ли одна?

Дорожки оцениваются по отдельности, а не весь файл одним вердиктом. Что можно унести — уносится дорожка за дорожкой; что нельзя — идёт через перекодирование. По-настоящему к «осталась одна дорожка» приводит только такой способ работы, который смотрит лишь на первую аудиодорожку. В многоязычном фильме сначала сосчитайте, на какой по счёту дорожке сидит нужный вам язык.

Можно ли положить растровые субтитры в MP4 как есть?

Нельзя. Дорожка субтитров в MP4 устроена под текст, для картинок подходящего места нет. Реальных способа ровно два: распознать в текст и унести (может получиться неточно — надо проверять) — или расстаться с этими субтитрами. Третьего способа — сохранить исходную графику и при этом уместить её в текстовую дорожку — не существует.

Можно ли пересчитать эти значения на моём компьютере?

Читается внутренняя структура файла — это пересчитывается на любой машине: что лежит внутри вашего файла, проверочный инструмент перечислит. Пересчитать не удаётся только вторую половину: принимает ли устройство эту сторону — покажет лишь одно настоящее воспроизведение. Эта страница даёт порядок суждения, а не таблицу, которой надо верить.


Axiom One LLC — CineX