Аудио и видео
Рецепты 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
Добавить субтитры отдельной дорожкой, не трогая видео.