На главную

Аудио и видео

Рецепты ffmpeg

Обрезка, конвертация, GIF, звук и склейка — готовыми командами и конструктором, который подставит ваши тайм-коды.

Конструктор

Собрать команду

С «копированием потоков» рез идёт по ближайшему ключевому кадру, зато мгновенно. Точный рез требует перекодирования.

Команда

ffmpeg -ss 00:00:10 -i input.mp4 -t 00:00:30 -c copy output.mp4

Тайм-код принимается в любом виде: «90», «1:30» или «00:01:30» — приводится к ЧЧ:ММ:СС автоматически.

Подставить имена файлов

Показано 48 из 48 команд.

Что нужно знать до первой команды

Порядок аргументов у ffmpeg значим: всё, что стоит до -i, относится к входу, всё после — к выходу.

  • ffmpeg -i input.mp4 output.mp4

    Конвертация по расширению выходного файла: формат определяется именем.

  • ffmpeg -i input.mp4

    Без выхода команда просто печатает сведения о потоках — быстрый способ посмотреть, что внутри.

  • ffprobe -v error -show_streams -show_format input.mp4

    Подробности о файле: кодеки, длительность, битрейт, размер кадра.

  • ffprobe -v error -select_streams v:0 -show_entries stream=width,height,r_frame_rate -of csv=p=0 input.mp4

    Только размер кадра и частота — удобно в скрипте.

  • ffmpeg -hide_banner -loglevel error -stats -i input.mp4 output.mp4

    Тихий режим: только прогресс и настоящие ошибки.

  • ffmpeg -y -i input.mp4 output.mp4

    -y перезаписывает выход без вопроса, -n — наоборот, никогда.

  • ffmpeg -i input.mp4 -c copy output.mp4

    Перепаковать контейнер без перекодирования: мгновенно и без потери качества.

  • ffmpeg -i input.mp4 -map 0 -c copy output.mp4

    Сохранить все дорожки: по умолчанию берётся по одной лучшей каждого типа.

Конвертация и сжатие

CRF — это качество, а не размер: чем меньше число, тем лучше картинка и тяжелее файл. 18 почти неотличимо от оригинала, 23 — норма, 28 — заметно.

  • ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

    Универсальный H.264 + AAC: играет везде.

  • ffmpeg -i input.mp4 -c:v libx265 -crf 28 -tag:v hvc1 -c:a copy output.mp4

    H.265: примерно вдвое меньше при том же качестве, но медленнее и не везде играет.

  • ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 32 -b:v 0 -c:a libopus output.mp4

    VP9 + Opus для веба в контейнере webm.

  • ffmpeg -i input.mp4 -vf "scale=1280:-2" -c:a copy output.mp4

    Ужать до 720p по ширине; -2 держит пропорции и чётную высоту, которой требует H.264.

  • ffmpeg -i input.mp4 -movflags +faststart -c copy output.mp4

    Перенести индекс в начало файла: видео начинает играть, не дожидаясь полной загрузки.

  • ffmpeg -i input.mp4 -r 30 output.mp4

    Сменить частоту кадров.

  • ffmpeg -i input.mp4 -an output.mp4

    Выбросить звук; -vn — наоборот, оставить только звук.

  • ffmpeg -i input.mp4 -pix_fmt yuv420p output.mp4

    Формат пикселей, который понимают браузеры и Quick Look. Частая причина «чёрного экрана».

Обрезка и склейка

-ss перед -i перематывает быстро, но по ключевым кадрам; после -i — точно до кадра, но медленно. С -c copy рез всегда идёт по ключевому кадру.

  • ffmpeg -ss 00:01:30 -i input.mp4 -t 30 -c copy output.mp4

    Быстрый вырез 30 секунд с полутора минут без перекодирования.

  • ffmpeg -i input.mp4 -ss 00:01:30 -to 00:02:00 -c:v libx264 -crf 20 output.mp4

    Точный вырез до кадра — с перекодированием.

  • ffmpeg -i input.mp4 -ss 00:00:10 -c copy output.mp4

    Отрезать первые десять секунд.

  • ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

    Склеить файлы одного формата; в list.txt строки вида: file 'part1.mp4'.

  • ffmpeg -i a.mp4 -i b.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4

    Склейка файлов с разными параметрами — через перекодирование.

  • ffmpeg -i input.mp4 -f segment -segment_time 600 -c copy part_%03d.mp4

    Разрезать на куски по десять минут.

  • ffmpeg -i input.mp4 -vf "select='gt(scene,0.4)',showinfo" -vsync vfr shot_%03d.jpg

    Кадры смены сцены — быстрый обзор длинного видео.

Звук

  • ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp4

    Извлечь звук в MP3 переменного битрейта (q:a 0 — лучшее, 9 — худшее).

  • ffmpeg -i input.mp4 -vn -c:a copy audio.m4a

    Вынуть дорожку как есть, без перекодирования.

  • ffmpeg -i input.mp4 -af "volume=1.5" output.mp4

    Поднять громкость в полтора раза.

  • ffmpeg -i input.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11 output.mp4

    Выровнять громкость по стандарту EBU R128 — как это делают подкасты.

  • ffmpeg -i input.mp4 -af "silenceremove=start_periods=1:start_threshold=-50dB" output.mp4

    Обрезать тишину в начале.

  • ffmpeg -i input.mp4 -ac 1 -ar 16000 output.mp4

    Моно и 16 кГц — то, что просят движки распознавания речи.

  • ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -map 0:v:0 -map 1:a:0 -shortest output.mp4

    Заменить звуковую дорожку.

  • ffmpeg -i input.mp4 -filter_complex "[0:a]showwavespic=s=1200x300" -frames:v 1 wave.png

    Картинка формы волны.

GIF и картинки

Хороший GIF делается в два прохода: сначала палитра по всему ролику, потом кодирование по ней. В один проход получается грязь.

  • ffmpeg -i input.mp4 -vf "fps=12,scale=480:-1:flags=lanczos,palettegen" palette.png

    Шаг 1: собрать палитру.

  • ffmpeg -i input.mp4 -i palette.png -lavfi "fps=12,scale=480:-1:flags=lanczos [x]; [x][1:v] paletteuse" output.mp4

    Шаг 2: собрать GIF по палитре.

  • ffmpeg -ss 00:00:05 -i input.mp4 -frames:v 1 -q:v 2 frame.jpg

    Один кадр на пятой секунде — обложка ролика.

  • ffmpeg -i input.mp4 -vf fps=1 frame_%04d.png

    По кадру в секунду в файлы.

  • ffmpeg -framerate 24 -i frame_%04d.png -c:v libx264 -pix_fmt yuv420p output.mp4

    Обратно: последовательность картинок в видео.

  • ffmpeg -i input.mp4 -vf "select=not(mod(n\,100))" -vsync vfr -q:v 3 preview_%03d.jpg

    Каждый сотый кадр — контактный лист.

  • ffmpeg -i input.mp4 -vf "thumbnail,scale=640:-1" -frames:v 1 thumb.png

    Кадр, который сам ffmpeg считает представительным.

Картинка: поворот, обрезка, наложение

  • ffmpeg -i input.mp4 -vf "crop=1280:720:0:0" output.mp4

    Обрезать кадр: ширина, высота, отступ слева, отступ сверху.

  • ffmpeg -i input.mp4 -vf "transpose=1" output.mp4

    Поворот на 90° по часовой; 2 — против, "transpose=1,transpose=1" — на 180°.

  • ffmpeg -i input.mp4 -vf "hflip" output.mp4

    Отзеркалить по горизонтали; vflip — по вертикали.

  • ffmpeg -i input.mp4 -vf "pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black" output.mp4

    Вписать в кадр 1920×1080 с чёрными полями.

  • ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-20:H-h-20" output.mp4

    Логотип в правом нижнем углу.

  • ffmpeg -i input.mp4 -vf "drawtext=text='Черновик':fontsize=48:fontcolor=white@0.5:x=(w-tw)/2:y=(h-th)/2" output.mp4

    Надпись поверх видео.

  • ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4

    Ускорить вдвое вместе со звуком (atempo принимает от 0.5 до 2.0).

  • ffmpeg -i input.mp4 -vf "minterpolate=fps=60" output.mp4

    Досчитать промежуточные кадры до 60 fps. Медленно и не всегда красиво.

  • ffmpeg -i input.mp4 -vf "subtitles=subs.srt" output.mp4

    Вжечь субтитры в картинку.

  • ffmpeg -i input.mp4 -i subs.srt -c copy -c:s mov_text output.mp4

    Добавить субтитры отдельной дорожкой, не трогая видео.