Как убрать чёрные полосы, которые вшиты в само видео

Некоторые видео несут чёрные полосы внутри самой картинки, поэтому никакая настройка «соотношения сторон» в плеере их не убирает, а на сверхшироком экране они обрамляют фильм со всех четырёх сторон. Решение — обрезать ровно эти полосы и ничего больше. Вот откуда полосы берутся, почему обрезка на глаз не получается и как Frame Player находит их, измеряя файл.

Обновлено

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

Полосы, которые добавляет плеер, и полосы, которые есть в файле

Чёрные полосы бывают двух видов, и убрать можно только один.

Полосы, которые добавляет плеер, появляются всякий раз, когда у картинки и экрана разная форма. Фильм, снятый в 2,39:1 — обычном кинематографическом широком формате, — шире экрана 16:9, поэтому его показывают во всю ширину с чёрным сверху и снизу. Это вся картинка, настолько крупно, насколько она помещается. Убрать эти полосы, ничего не отрезав от картинки, нельзя.

Полосы внутри файла были добавлены, когда видео делали. Blu-ray — это 1920×1080, кадр 16:9, поэтому фильм 2,39:1 хранится на нём с чёрными полосами над картинкой и под ней — это леттербокс. Сериал 4:3, ремастированный в кадр 16:9, получает полосы по бокам — это пилларбокс. А передача 4:3 внутри кадра 16:9 с леттербоксом получает их со всех четырёх сторон. Для плеера эти полосы — картинка: чёрная, но часть кадра, который ему дали. Поэтому же две копии одного фильма могут различаться — одна хранится в полном 16:9 с полосами, другая уже обрезана до собственной формы фильма.

Почему они появляются со всех четырёх сторон

На экране 16:9 файл 16:9 с леттербоксом выглядит так же, как обрезанный: полосы сверху и снизу в любом случае. Полосы из файла становятся видны, когда у экрана или окна другая форма.

Что вы смотритеГдеЧто вы видите
Фильм 2,39:1 в файле 16:9Сверхширокий монитор 21:9Плеер добавляет полосы по бокам кадра 16:9, а фильм внутри него — с полосами сверху и снизу из файла: маленькая картинка с чёрным со всех четырёх сторон
Тот же файлОкноУ окна форма кадра 16:9, а фильм занимает только его середину
Сериал 4:3 в файле 16:9Экран MacBook 16:10Чёрное по бокам из файла и тонкие полосы сверху и снизу из-за экрана
Обрезанная копия того же фильмаЛюбой из этихПолосы только там, где их требует форма экрана

Обрезка полос из файла превращает копию из первой строки в копию из последней.

Как это делают другие плееры

На глаз. Меню VLC Видео › Кадрирование предлагает список фиксированных соотношений, и похожее есть в большинстве плееров. Вы выбираете то, что выглядит правильно, плеер вырезает по центру прямоугольник этой формы — и для следующего файла вы выбираете снова.

По тому, что на экране. Кнопки обрезки у mpv нет, но он умеет запускать фильтр FFmpeg cropdetect, который сообщает полосы в проигрываемых кадрах, а в исходниках mpv лежит скрипт autocrop.lua, который запускает его на сцене перед вами и обрезает по найденному. Проблема — в самой сцене. У ночного кадра тёмные края, которые на самом деле картинка, начало фильма может быть чёрным целую минуту, а сцена, где верх кадра тонет в темноте, выглядит в точности как леттербокс для всего, что видит только эту сцену. Кроме того, фильтру нужны кадры в обычной памяти, поэтому при аппаратном декодировании, пока он работает, каждый кадр приходится копировать обратно из видеокарты.

Как это делает Frame Player

Откройте панель изображения — щёлкните по видео правой кнопкой и выберите Изображение или нажмите C — и выберите один из вариантов в разделе Обрезка: Нет, Авто, 2.39, 1.85 или 4:3.

Панель изображения на серии с леттербоксом. Автообрезка измеряет файл, и окно сжимается до собственной формы фильма.

«Авто» измеряет весь файл, а не сцену на экране

«Авто» открывает файл второй раз, отдельно от воспроизведения, и декодирует восемь ключевых кадров, разбросанных от 10 % до 90 % его длины. На каждом оно идёт внутрь от каждого края, строка за строкой, пока не встретит картинку: строка считается полосой, пока не больше одного отсчёта из пятидесяти светлее чёрного больше чем на 16 уровней, — так что слабый шум, который сжатие оставляет в полосе, или одиночный горячий пиксель её не прерывают.

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

Остальное — осторожность:

  • Полосы меньше 1 % кадра не трогаются — это выравнивание кодировщика, и их обрезка поменяла бы форму окна ради того, чего никто не увидит.
  • Обрезка, после которой осталось бы меньше 30 % ширины или высоты, считается ошибкой измерения, и ничего не обрезается.
  • Если измерить удаётся меньше трёх кадров, как в коротком ролике, тёмном от начала до конца, ответ — «Чёрных полос не найдено».

Мы проверили это на тестовых файлах с леттербоксом и пилларбоксом, в том числе в 10-битном HEVC, и на материале, сделанном, чтобы его обмануть, — тёмные фейерверки, космические сцены: прямоугольник каждый раз был точным, у пяти полнокадровых фильмов обрезать оказалось нечего, а 4K-файл в HEVC занял меньше секунды.

Именованные форматы

2,39 и 1,85 — два соотношения, в которые обычно вписывают кинофильмы с леттербоксом; 4:3 — то, в которое с пилларбоксом вписывают телепередачи. Выбор одного из них вырезает по центру прямоугольник этой формы, вычисленный из отображаемой формы кадра, поэтому анаморфный файл, соотношение сторон, заданное вручную, и повёрнутое видео получаются правильно. Если картинка уже такой формы, плеер так и скажет и оставит её как есть. Используйте их, когда знаете соотношение, когда полосы недостаточно чёрные для измерения или для ссылки, где «Авто» недоступно.

Один выбор на сезон, своё измерение для каждой серии

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

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

На торренте, который ещё качается

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

Если скачано слишком мало, чтобы измерить три разных места, панель скажет Скачано ещё слишком мало, попробуйте чуть позже. Когда серия открывается с уже выбранным «Авто», плеер сам пробует снова во время воспроизведения — каждые 30 секунд, всего четыре раза.

Окно принимает форму картинки

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

Обрезка — это не «Заполнить экран»

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

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

Заполнить экран увеличивает картинку, пока полос не останется совсем, и отрезает всё, что больше не помещается: края фильма 2,39:1 на экране 16:9, верх и низ у фильма 4:3. Это уже картинка, а не полосы: титры, лица у края кадра, впечатанные в изображение субтитры.

В панели есть также яркость, контраст, насыщенность и гамма, а на Mac выбор между тональными кривыми mpv и QuickTime находится в «Параметрах». Для мягкого источника низкого разрешения в той же панели есть нейросетевое повышение чёткости.

Вопросы

Не отрежет ли обрезка часть картинки?

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

Я обрезал полосы, а в полноэкранном режиме они всё равно есть. Почему?

Потому что форма экрана отличается от формы фильма. Фильму 2,39:1 на экране 16:9 нужны полосы сверху и снизу, каким бы ни был файл; после обрезки плеер рисует их сам, а не показывает те, что в файле. Заметная разница от обрезки — в окне, которое принимает форму фильма, и на экране, чья форма ближе к фильму, чем была форма файла, например на сверхшироком мониторе.

Меняет ли это файл, перекодирует ли его?

Нет. Обрезка применяется во время воспроизведения, файл на диске не трогается, а выбор «Нет» возвращает весь кадр.

Нужно ли задавать обрезку заново для каждой серии?

Нет. Выбор сохраняется для папки или для торрента, и каждая серия применяет его к себе при открытии — «Авто» измеряет полосы именно этой серии, так что финал в более широком формате не обрежется по пилоту.

Работает ли это с онлайн-видео?

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

Есть ли сочетание клавиш?

C открывает панель «Изображение», где и находится обрезка. Клавишу можно поменять в редакторе клавиш.

Откройте что-нибудь.Плеер запомнит, где вы остановились.

$ brew install --cask risenxxx/tap/frame-player

Версия 1.38.1macOS-сборки нотаризованыWindows-сборки без подписи: SmartScreen спросит один раз