Вопрос или проблема
Я перекодирую прямую трансляцию; многие из них будут изменять разрешение из-за PK.
Например, разрешение 720×1280, когда в одиночке; после начала PK разрешение становится 900×720; после завершения PK и возвращения к одиночке, разрешение снова становится 720×1280.
Эти записанные видеофайлы слишком большие, и они все в h264, поэтому я пытаюсь перекодировать их в AV1, чтобы уменьшить размер файла.
Но после перекодирования разрешения фиксированы и не корректируются, как это было раньше.
Вот изображение, у меня недостаточно репутации, чтобы публиковать изображения.
https://i.sstatic.net/LhLAXMjd.gif
Например, оригинальный файл слева, а перекодированный файл справа.
Это видео начинается с разрешением 900×720, PK заканчивается и возвращается к одиночке на 00:00:06, разрешение меняется на 720×1280.
ffplay воспроизводит оригинальный видеофайл, все кажется в порядке.
ffplay воспроизводит перекодированный видеофайл, после 00:00:06 разрешение остается 900×720 и вызывает растягивание и обрезку графики.
Вот команда, которую я использовал:
ffmpeg -i original.flv -y -c:v libsvtav1 re-encode.mp4
Я пытался перекодировать, используя тот же кодек, h264, но проблема остается.
ffmpeg -i original.flv -y -c:v libx264 re-encode.mp4
Не знаю, как это исправить.
Вот видеофайл: https://www.mediafire.com/file/0vaxtzurwhom8bn/ReEncode_Resolution.zip/file
Я ожидаю, что перекодированный видеофайл сможет воспроизводиться корректно в ffplay (разрешение меняется, когда это необходимо).
Ответ или решение
Проблема адаптивной настройки разрешения видео при перекодировке
Введение
Ваша ситуация с динамическим разрешением в потоке видео, особенно во время использования функций с Picture-in-Picture (PK), затрагивает важные аспекты обработки видеофайлов. В процессе перекодирования видео с изменяющимся разрешением в статичное, могут возникнуть проблемы с неправильной адаптацией разрешения, что приводит к искажениям и несоответствию.
Суть проблемы
Вы описали, что исходный файл видео корректно изменяет разрешение с 900×720 во время использования PK на 720×1280, когда PK завершается. Однако после перекодирования с использованием FFmpeg, новый файл сохраняет фиксированное разрешение 900×720, что приводит к проблемам с отображением, таким как растягивание и обрезка графики.
Причиной данной проблемы, скорее всего, является то, как метаданные об изменении разрешения (или же дорожки) обрабатываются и записываются в процессе перекодирования, что препятствует корректному считыванию этих изменений при воспроизведении новых файлов.
Технические детали решения
-
Поддержка переменного разрешения: Убедитесь, что ваш кодек и контейнер, используемые для перекодирования видео, поддерживают переменное разрешение. Кодек AV1 и H.264, которые вы использовали, оба могут обрабатывать переменное разрешение, но настройка и контейнер могут повлиять на окончательный результат.
-
Использование правильных параметров FFmpeg:
Попробуйте использовать следующие команды для перекодирования, включая дополнительные параметры, которые могут помочь сохранить динамическое разрешение:ffmpeg -i original.flv -y -c:v libsvtav1 -movflags +faststart -pix_fmt yuv420p -vf scale=1080:-1 -g 30 re-encode.mp4
Или для H.264 с использованием переменного битрейта:
ffmpeg -i original.flv -y -c:v libx264 -preset fast -crf 23 -profile:v main -movflags +faststart re-encode.mp4
Здесь
-movflags +faststart
помогает сделать файл более удобным для потоковой передачи, а-vf
(видеофильтры) назначает параметры масштабирования. -
Проверка метаданных: После перекодирования проверьте метаданные нового файла на наличие информации о разрешении. Это можно сделать с помощью команды:
ffmpeg -i re-encode.mp4
Убедитесь, что информация о разрешении отображается корректно. Если разрешение зафиксировано, это может указывать на проблему с кодировкой.
-
Тестирование воспроизведения: Попробуйте воспроизвести перекодированные файлы в разных медиаплеерах — FFplay, VLC или других, чтобы проверить, сохраняется ли динамика разрешения. Иногда проблема может быть связана с конкретным медиаплеером не поддерживающим регулировку разрешения.
Заключение
Перекодирование видео с динамическим разрешением требует учёта ряда параметров и потенциальных проблем, касающихся видео- и аудиокодеков, а также контейнеров для хранения. Попробуйте предложенные выше команды и посмотрите, правильно ли сохраняется динамика разрешения. Если все шаги выполнены корректно, новый файл должен поддерживать адаптивное разрешение так же эффективно, как и оригинальный файл. Обязательно проведите тестирования с метаданными и характеристиками файла после перекодировки для окончательной проверки результата.