Для масштабирования видео с помощью FFmpeg необходимо определить, в чем именно заключается проблема с исходным видео. Увеличенный кадр, менее заметный шум, более чистые края и иной цветовой баланс — это разные задачи. Если объединить их в одну команду до получения базового результата, нельзя будет понять, что помогло, а что внесло артефакты.
FFmpeg хорошо подходит для повторяемых преобразований. Он может передискретизировать кадры, применять фильтры, кодировать новый файл и сохранять аудио, если это допускает выходной контейнер. Он не может подтвердить, как выглядели отсутствующие детали в исходной сцене. Считайте первый рендер сравнением, из которого можно извлечь выводы, а не готовым результатом.
Проверьте исходник перед применением фильтров
Начните с проверки видеопотока и аудиопотока. Нужно сохранить исходное соотношение сторон кадра и не удалить аудио по ошибке.
ffprobe -v error \
-show_entries stream=codec_type,codec_name,width,height,avg_frame_rate \
-of default=noprint_wrappers=1 input.mp4Запишите ширину, высоту, частоту кадров и наличие аудио в файле. Чистому, но небольшому исходнику может требоваться только масштабирование. Для зашумлённого исходника стоит протестировать шумоподавление на коротком фрагменте, прежде чем тратить время на экспорт всего видео.
Масштабируйте до фиксированного холста с сохранением соотношения сторон
Эта команда вписывает исходник в холст размером 1920 на 1080. Она не будет растягивать портретное или квадратное видео по горизонтали, чтобы заполнить кадр 16:9. Фильтр pad заполняет оставшееся пространство.
ffmpeg -i input.mp4 \
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" \
-c:v libx264 -crf 18 -c:a copy output-1080p.mp4scale изменяет размеры кадра. force_original_aspect_ratio=decrease сохраняет пропорции изображения, вписывая его в запрошенный размер. В этом примере используется libx264, поэтому выберите другой видеокодер, если он отсутствует в вашей сборке FFmpeg или не подходит для целевой платформы.
Устраняйте шум до добавления резкости
Снижение уровня шума может облегчить просмотр поврежденного источника звука. Если надавить слишком сильно, текстура тоже исчезнет. Перед тем как окончательно установить какие-либо настройки, запустите короткий тестовый пример рядом с неизмененным исходным кодом.
ffmpeg -i input.mp4 \
-vf "hqdn3d=1.5:1.5:6:6" \
-c:v libx264 -crf 18 -c:a copy output-denoised.mp4hqdn3d имеет пространственные и временные настройки для яркостной и цветностной составляющих. Эти цифры — отправная точка, а не стандартные значения для каждого видеоролика. Если лица, ткань или тонкие края выглядят восковыми, уменьшите шумоподавление вместо того, чтобы пытаться скрыть проблему усилением резкости.
Добавьте небольшую заточку.
Повышение резкости усиливает контраст на границах. Оно может помочь слегка мягкому исходнику, но также способно сделать ореолы, зерно или артефакты сжатия гораздо заметнее.
ffmpeg -i input.mp4 \
-vf "unsharp=5:5:0.5:5:5:0" \
-c:v libx264 -crf 18 -c:a copy output-sharpened.mp4Первые значения задают матрицу и величину для яркостной составляющей. Последующие значения применяются к цветностной составляющей. Умеренную величину для яркостной составляющей гораздо легче оценить, чем сильную настройку, применённую ко всему видео.
Корректируйте цвет только тогда, когда это необходимо исходнику
Яркость, контрастность и насыщенность могут быстро изменить вид клипа. Вносите небольшие корректировки и сравнивайте стоп-кадры из одной и той же сцены.
ffmpeg -i input.mp4 \
-vf "eq=contrast=1.05:saturation=1.05" \
-c:v libx264 -crf 18 -c:a copy output-corrected.mp4Цветокоррекция не исправит проблему масштабирования или шумоподавления. Ограничивайте каждый тест одной задачей, чтобы можно было отменить одно решение без пересборки всего рабочего процесса.
Создайте объединённую цепочку фильтров после отдельных тестов
После того как вы определитесь с настройками, которые можете обосновать, выполните полный экспорт. Эта цепочка подгоняет видео под холст 1080p, использует лёгкое шумоподавление и применяет умеренное повышение резкости для яркостной составляющей.
ffmpeg -i input.mp4 \
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,hqdn3d=1.5:1.5:6:6,unsharp=5:5:0.5:5:5:0" \
-c:v libx264 -crf 18 -c:a copy output-enhanced-1080p.mp4Проверьте несколько сложных сцен: движение, тёмные области, яркие края, оттенки кожи и мелкие узоры. Если видео стало более гладким, но менее правдоподобным, уменьшите или отключите шумоподавление. Если края выглядят обведёнными, уменьшите величину повышения резкости. Результат должен выглядеть хорошо в движении, а не только на удачном стоп-кадре.
Знайте, где заканчиваются возможности рабочего процесса с фильтрами
Масштабирование создаёт больше пикселей, но не определяет, какие детали отсутствовали в сцене. Шумоподавление и повышение резкости имеют собственные издержки. Они могут сделать дефект менее отвлекающим, одновременно меняя текстуру или поведение краёв.
Это ограничение важно учитывать при планировании более широкого рабочего процесса обработки видео. Используйте FFmpeg для предсказуемых преобразований, таких как масштабирование, заполнение, кодирование и управляемые проходы фильтрации. Если проект также предполагает этап, основанный на моделировании, сначала определите задачу и критерии приемки. Затем проверьте текущую модель и требования к запросу, вместо того чтобы предполагать, что каждая видеомодель выполняет одну и ту же работу.
Оцените этап обработки видео на основе модели с помощью OdiRouter
Общедоступный [каталог видеомоделей OdiRouter](https://odirouter.ai/models?В разделе category=Video можно проверить доступные варианты видео. Каталог меняется, поэтому перед созданием интеграции откройте актуальную страницу сведений и документацию выбранной модели. Разработчики могут начать с OdiRouter getting-started documentation и OpenAI SDK integration guide.
Применяйте к этапу на основе модели ту же дисциплину, что и к фильтрам. Сохраняйте исходный входной материал, определяйте нужный результат, тестируйте репрезентативные клипы и фиксируйте модель, настройки и результаты. Это позволяет FFmpeg и рабочему процессу с API обслуживать разные части одного и того же медиаконвейера.
Часто задаваемые вопросы
Может ли FFmpeg добавить в видео низкого разрешения новые подтверждённые детали?
Нет. FFmpeg может выполнить повторную дискретизацию кадра и применить фильтры, но увеличенный растр не подтверждает отсутствующие детали сцены. Оценивайте экспорт на репрезентативном движущемся материале, а не только по разрешению.
Нужно ли применять шумоподавление и повышение резкости к каждому видео?
Нет. Применяйте шумоподавление, когда проблема заключается в видимом шуме, и осторожно повышайте резкость, когда исходник слегка мягкий. Тестируйте эти два изменения независимо, поскольку каждое из них может ухудшить некоторые видеоматериалы.
Почему при масштабировании следует сохранять соотношение сторон?
Принудительная подгонка каждого исходника под фиксированные ширину и высоту может растянуть объекты. Подгонка исходника под холст и добавление полей в неиспользуемой области сохраняют исходные пропорции кадра.
Где можно проверить актуальные возможности OdiRouter для видео?
Начните с каталога видеомоделей OdiRouter, затем перед интеграцией проверьте актуальную документацию и схему запросов выбранной модели.