Одно и то же видео: компьютер воспроизводит, а телефон — нет. Контрольный список по слоям (у каждого слоя — реально снятые значения)
Если компьютер открывает файл, а телефон нет — причина обычно не в качестве и не в том, повреждён файл или нет. Прежде чем будет нарисован первый кадр, четыре слоя выносят суждение каждый сам; не пройдён любой из них — результат всегда один и тот же: «не открывается». Поэтому верный первый шаг — не брать другой инструмент и не пережимать заново, а прочитать файл и определить, какой слой вас и остановил.
1. До того как появится хоть один кадр, четыре слоя уже решили каждый своё
- Контейнер. Соглашается ли устройство вообще открыть этот файл — здесь решается «откроется или нет», а не «хорошо или плохо».
- Тег видеодорожки. Одни и те же HEVC-кадры в контейнерах семейства MP4 можно записать двумя разными декларациями. Изображение в двух файлах совпадает побайтно, а поведение оказывается прямо противоположным.
- Аудиодорожки. Даже когда с изображением всё в порядке, одна-единственная аудиодорожка способна заставить устройство отвергнуть весь файл — или открыть его без звука.
- Дорожка субтитров. Текстовые и растровые субтитры — два разных типа данных, а дорожка субтитров в MP4 строится под текст.
Эти четыре слоя оцениваются по отдельности, поэтому и симптомы отдельны: не тот контейнер — файл не открывается в принципе; не тот тег — открывается, но изображение не движется; не тот звук — открывается без звука; не то с субтитрами — фильм идёт как надо, а субтитров нет. Смешивать четыре симптома в «плохой инструмент» — самое частое место, где этот класс продуктов понимают неверно.
2. Первый шаг — прочитать файл, а не менять инструмент
Читаем слой за слоем: любой проверочный инструмент, способный перечислить внутреннюю структуру файла, отдельными строками выведет контейнер, имя кодека каждой дорожки, тег дорожки, глубину цвета, формат пикселей, длительность и число байтов. Этот шаг стоит несколько минут, а избавляет вас от последующих часов повторных проб.
Все значения ниже сняты в одном и том же проверочном прогоне на одной и той же машине; условия записаны в разделе 8.
| Образец | Контейнер | Тег видеодорожки | Профиль / формат пикселей | Размер | Число байтов |
|---|---|---|---|---|---|
| B | mp4 | hev1 | Main 10 / yuv420p10le | 1920×1080 | 12,973,400 |
| C | mp4 | hvc1 | Main 10 / yuv420p10le | 1920×1080 | 12,973,400 |
Оба файла сделаны из одного и того же двухминутного куска изображения, ни один кадр не был перекодирован, и число байтов совпадает до байта; единственная разница — тот самый четырёхсимвольный тег дорожки.
Смена расширения не трогает ни один из перечисленных слоёв; пережатие изображения с высоким битрейтом тоже не меняет тот слой, который вас остановил. Сначала определите, где заслон, — потом действуйте.
3. Слой тегов: одни и те же кадры — две записи
В контейнерах семейства MP4 HEVC декларируется как hvc1 или hev1. Разница в том, где записана конфигурация декодирования: hvc1 помещает её в описание сэмплов дорожки, и читающая сторона успевает настроить декодер ещё до первого кадра; hev1 разрешает передавать эти данные вместе с потоком. Тому, кому конфигурация нужна до начала работы, не стоит ждать, что она появится на полпути.
На этом слое не нужно заново сжимать ни один кадр: изображение уносится копированием, а заново пишется только тег дорожки. Пара образцов выше получена ровно так — один и тот же видеоряд записан дважды, результаты совпадают по длине побайтно.
Что стоит запомнить о цене этого слоя: это копирование, а не пережатие. Всё, что укладывается в границы этого слоя, не требует перекодирования.
4. Слой звука: безупречное изображение может застрять из-за одной аудиодорожки
Когда изображение уже принято, «пойдёт ли, будет ли звук» решают только аудиодорожки. Реальный набор форматов в этом семействе шире, чем принято думать: в одной и той же партии материалов встречались TrueHD, E-AC3, AC-3, Opus, FLAC, MP2, MP3, DTS и PCM.
| Источник | Контейнер | Изображение | Звук | Результат | Что стало со звуком |
|---|---|---|---|---|---|
| G | matroska | HEVC Main 10 | TrueHD | mp4 / hvc1 | Переписан в AAC (изображение не пережималось) |
| I | matroska | HEVC Main 10 | E-AC3 | mp4 / hvc1 | Унесён как есть (тег ec-3) |
В обоих прогонах изображение не пережималось — вся разница в звуке: одну дорожку пришлось переписать, другая унеслась как есть. И ещё одно замечание, которое видно, только когда пересчитываешь дорожки по одной: проверка одной лишь первой аудиодорожки даёт файл, который открывается — и тонет в полной тишине. В многоязычном фильме нужный язык очень часто сидит именно на второй дорожке.
5. Слой субтитров: текст и картинка — два разных типа данных
| Источник | Звук | Субтитры | Результат | Куда делись субтитры |
|---|---|---|---|---|
| K (matroska) | AC-3, Opus, AAC | Subrip, ASS | mp4 | обе превратились в текстовые дорожки (mov_text / tx3g) |
| F (matroska) | FLAC | HDMV PGS (картинка) | — | для картинки нет подходящего места в дорожке |
Текстовые субтитры (SRT, ASS) переезжают в целевой контейнер текстом — размер и цвет шрифта по-прежнему менять вам. Растровые — те, что на Blu-ray сжаты постранично в картинки, как и субтитры DVD и записей с ТВ-приставок, — по сути фотографии субтитров. Дорожка субтитров в MP4 устроена под текст; для картинок в ней места нет.
Рабочих пути два: распознать текст из картинок и унести его как текст (распознавание — это способность, а не обещание: распознанные строки могут быть неточны, перед выдачей их стоит проверить) — либо расстаться с этими субтитрами. Изображение не сдвинется ни на пиксель, и текст в кадр вжигать не будут: такой способ дал бы новую видеодорожку, а не ваш исходный фильм.
Вопрос «поддерживаются ли субтитры» ничего не решает. Спрашивать надо иначе: эта дорожка — текст или картинка, и остаётся ли она тем же самым после конвертации.
6. Файл прочитать можно — устройство нельзя
Этот список доводит вас до ответа «какой слой править». Он не решает за вас, примет ли файл конкретное устройство: глубина цвета и профиль, цветовые метки, частота кадров, 4:2:2, длинные GOP получают ответ только на конкретном устройстве. Среди тех же образцов есть и Main 10, и Main 8, а цветовые метки на одних дорожках есть, на других нет — в файле эти различия читаются, а на устройстве становится видно, к чему они приводят.
- Фраза «это HEVC» — не ответ; только когда считаны тег, глубина цвета, звук и субтитры, круг сужается до одного-двух слоёв.
- То, что тот же видеоряд пошёл в другой коробке, не значит, что он пойдёт в этой — контейнер и кодирование это две отдельные переменные.
- Короткие образцы доказывают структуру, но не поведение по объёму и качеству; такие выводы можно делать только по длинным фильмам и на реальных устройствах.
- Любую «таблицу устройств» не стоит принимать на веру, включая эту страницу: один раз проиграть свой файл на самом устройстве — единственная приёмка, которую можно зачесть. Список контейнеров и кодеков, проверенных на реальных устройствах, лежит здесь.
7. Порядок проверки — идти по шагам
- Прочитать нутро. Контейнер, тег изображения, каждая аудиодорожка, каждая дорожка субтитров — всё в один прогон.
- Слой контейнера. Если файл не из той семьи, которую целевое устройство соглашается открывать, этого довольно, чтобы объяснить «не открывается в принципе», — даже когда изображение внутри совершенно.
- Слой тегов. Контейнер верный, изображение HEVC, но конфигурация не читается — сначала перепишите тег по разделу 3: это копирование, а не пережатие.
- Слой звука. Перечисляйте каждую аудиодорожку, не только первую; решить, какому языку стоять впереди, — осознанный выбор, а не случайность.
- Слой субтитров. Текст можно перенести; для картинки остаются только распознавание или отказ.
- Пережимать изображение — только в самом конце. Перекодирование нужно там, чему уже не поможет тег; это другая, более медленная работа, со своими пределами по объёму.
Если порядок неверный, на одном и том же устройстве один и тот же промах сделают трижды.
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); она меняет только то, сколько раз конвертировать можно после неё, об этом написано здесь.
- Контент под защитой DRM не обрабатывается — включая фильмы, арендованные или купленные в магазинах.
- Субтитры, которые никогда не были текстом, можно распознать в текст; распознавание может давать неточные строки, изображение не меняется нисколько, текст в кадр не вжигается.
- При пересборке субтитров различие между упрощённой и традиционной записью китайского теряется.
- На пути пережатия изображения результат останавливают, если он оказался бы больше исходника, — вместо того чтобы выдать его как есть.
- Обработка выполняется на этом устройстве, и сам файл никуда передавать не нужно; версии для Mac и iPhone — не один и тот же интерфейс, и мы не делаем вид, что он один.
Частые вопросы
Можно ли просто переименовать .mkv в .mp4?
Нельзя, и этот шаг никогда не был сокращением пути. Расширение — лишь этикетка: её смена не переписывает структуру внутри контейнера и не меняет кодек изображения; когда устройство открывает файл, оно читает внутреннюю структуру, а не имя. От переименования вероятность «откроется» не меняется, зато вы теряете возможность разобраться, какой слой вас останавливает.
Если переписать только тег — файл станет чем-то совсем другим?
Нет. У пары образцов выше при обратном чтении получается ровно то же число байтов (у обоих 12,973,400), ни один кадр не пережат. В этом и ценность этого слоя: то, что решается копированием, не стоит пробовать перекодированием.
У моего фильма пять аудиодорожек — не останется ли одна?
Дорожки оцениваются по отдельности, а не весь файл одним вердиктом. Что можно унести — уносится дорожка за дорожкой; что нельзя — идёт через перекодирование. По-настоящему к «осталась одна дорожка» приводит только такой способ работы, который смотрит лишь на первую аудиодорожку. В многоязычном фильме сначала сосчитайте, на какой по счёту дорожке сидит нужный вам язык.
Можно ли положить растровые субтитры в MP4 как есть?
Нельзя. Дорожка субтитров в MP4 устроена под текст, для картинок подходящего места нет. Реальных способа ровно два: распознать в текст и унести (может получиться неточно — надо проверять) — или расстаться с этими субтитрами. Третьего способа — сохранить исходную графику и при этом уместить её в текстовую дорожку — не существует.
Можно ли пересчитать эти значения на моём компьютере?
Читается внутренняя структура файла — это пересчитывается на любой машине: что лежит внутри вашего файла, проверочный инструмент перечислит. Пересчитать не удаётся только вторую половину: принимает ли устройство эту сторону — покажет лишь одно настоящее воспроизведение. Эта страница даёт порядок суждения, а не таблицу, которой надо верить.
Axiom One LLC — CineX