Все статьи

Масштабировать видео через CLI

ffmpeg pad вписывает кадр в заданный размер; split и gblur заполняют поля размытым кадром.

Открыть онлайн-конвертер

Какие пакеты установить

Нужен только ffmpeg. Для MP4 — libx264, для WebM — libvpx-vp9.

ffmpeg
apt install
sudo apt-get update
sudo apt-get install -y ffmpeg

Как вызвать команду

Вписать видео: scale=W:H:force_original_aspect_ratio=decrease, затем pad=W:H:(ow-iw)/2:(oh-ih)/2:color=0xRRGGBB. Для размытого фона разделите поток, растяните и размойте фон через gblur и наложите вписанное видео сверху.

ffmpeg
ffmpeg -y -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:color=0x000000,setsar=1" -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart output.mp4

Пример Dockerfile

Соберите минимальный образ Ubuntu с нужными пакетами и запускайте конвертацию в контейнере.

Dockerfile
FROM ubuntu:24.04

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        ffmpeg && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /work
docker build && docker run
docker build -t scale-video .
docker run --rm -v "$PWD:/work" -w /work scale-video \
  ffmpeg -y -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:color=0x000000,setsar=1" -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart output.mp4

Примеры команд

Команды ниже можно запускать локально после установки пакетов или внутри контейнера из Dockerfile.

Пример 1
ffmpeg -y -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:color=0x000000,setsar=1" -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart output.mp4
Пример 2
ffmpeg -y -i input.mp4 -filter_complex "[0:v]split=2[fg][bg];[bg]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,gblur=sigma=20[bg2];[fg]scale=1080:1920:force_original_aspect_ratio=decrease[fg2];[bg2][fg2]overlay=(W-w)/2:(H-h)/2,setsar=1[vout]" -map "[vout]" -map 0:a:0? -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart output.mp4