FFmpeg вміє майже все, що можна зробити з відео й аудіо, але кожного разу гуглити потрібний ключ дуже втомлює. Тому ось шпаргалка: найкорисніші команди на всі випадки, які я сам регулярно використовую. Тримай її під рукою або додай у закладки: заощадить купу часу. Основи (що таке FFmpeg, як його встановити, перші команди для конвертації) я розписував у статті FFmpeg: як конвертувати відео й аудіо через консоль, тут же зібрано все решту.

Загальна схема команди

ffmpeg [вхідні параметри] -i вхід [вихідні параметри] вихід

Усе, що стоїть перед -i, стосується вхідного файлу, усе після – вихідного. Тип результату FFmpeg визначає за розширенням вихідного файлу. Якщо вихідний файл уже існує, FFmpeg спитає, чи перезаписати; щоб не питав, додай -y.

Дізнатися все про файл

ffprobe -hide_banner відео.mp4

Покаже тривалість, кодеки, роздільну здатність, частоту кадрів, бітрейт і всі доріжки (відео, аудіо, субтитри). Перша команда, яку варто виконати, коли не розумієш, що за файл перед тобою.

Конвертація без втрати якості: просто змінити контейнер

ffmpeg -i відео.mkv -c copy відео.mp4

Ключ -c copy не перекодовує, а лише перекладає вміст в інший контейнер. Робиться за секунди й без втрати якості. Мінус: не всі кодеки підтримуються в усіх контейнерах, і тоді FFmpeg скаже про це помилкою. Тоді доведеться перекодовувати.

Стиснути відео

ffmpeg -i відео.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k стиснуте.mp4
  • -crf – якість: чим менше число, тим краща картинка і більший файл. Розумний діапазон – приблизно від 18 (дуже добре) до 28 (помітне стиснення);
  • -preset – швидкість кодування: від ultrafast до veryslow. Повільніший пресет дає менший файл за тієї самої якості.

Обрізати відео без перекодування

ffmpeg -ss 00:01:30 -i відео.mp4 -t 00:00:40 -c copy фрагмент.mp4

Почати з 1:30 і взяти 40 секунд. Оскільки це копіювання без перекодування, різ відбувається по найближчому ключовому кадру, тому початок може трохи «поплисти» на секунду-дві. Для точного різу прибери -c copy, тоді відео перекодується й різатиметься покадрово.

Склеїти кілька відео

Створи текстовий файл список.txt:

file 'частина1.mp4'
file 'частина2.mp4'
file 'частина3.mp4'

І запусти:

ffmpeg -f concat -safe 0 -i список.txt -c copy разом.mp4

Працює, якщо в усіх файлів однакові кодеки, роздільна здатність і частота кадрів. Якщо ж вони різні, прибери -c copy, і FFmpeg перекодує все під єдині параметри.

Витягти звук із відео

ffmpeg -i відео.mp4 -vn -c:a copy звук.m4a
ffmpeg -i відео.mp4 -vn -c:a libmp3lame -q:a 2 звук.mp3

Перша команда копіює звукову доріжку без втрат (працює, якщо в відео звук AAC), друга робить MP3 доброї якості. Ключ -vn означає «без відео».

Прибрати звук із відео

ffmpeg -i відео.mp4 -an -c:v copy без_звуку.mp4

Накласти музику на відео чи замінити звук

ffmpeg -i відео.mp4 -i музика.mp3 -map 0:v -map 1:a -c:v copy -shortest результат.mp4

Бере картинку з першого файлу, а звук із другого. -shortest обрізає результат за найкоротшою доріжкою.

Зробити відео з картинки й аудіо

Зручно, коли треба завантажити пісню на YouTube, не маючи відео:

ffmpeg -loop 1 -i обкладинка.jpg -i трек.mp3 -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest відео.mp4

Змінити роздільну здатність

ffmpeg -i відео.mp4 -vf scale=1280:-2 менше.mp4

Ширина 1280, висота розраховується автоматично з урахуванням пропорцій. Мінус дві замість мінус одиниці гарантує парну висоту, яку вимагають деякі кодеки.

Повернути чи обрізати кадр

ffmpeg -i відео.mp4 -vf "transpose=1" повернуте.mp4
ffmpeg -i відео.mp4 -vf "crop=1080:1080" квадрат.mp4

Перша команда повертає відео на 90° за годинниковою стрілкою (transpose=2 – проти), друга вирізає із центру квадрат 1080×1080.

Прискорити чи сповільнити

ffmpeg -i відео.mp4 -filter:v "setpts=0.5*PTS" -an швидше.mp4
ffmpeg -i відео.mp4 -filter:v "setpts=2.0*PTS" -an повільніше.mp4

Перша команда вдвічі швидша, друга вдвічі повільніша. Тут звук прибрано, бо він потребує окремого фільтра atempo. Це зручно для таймлапсів і конспективних відео.

Зробити GIF із відео

ffmpeg -i відео.mp4 -vf "fps=12,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" анімація.gif

Фільтр palettegen створює оптимальну палітру кольорів саме під це відео, тому GIF виходить помітно кращої якості, ніж за простого перетворення. Щоб вирізати фрагмент, додай перед -i ключі -ss і -t, як у команді обрізання вище.

Кадри з відео

ffmpeg -ss 00:00:10 -i відео.mp4 -frames:v 1 кадр.jpg
ffmpeg -i відео.mp4 -vf fps=1 кадр_%04d.jpg

Перша зберігає один кадр на десятій секунді, друга витягує по кадру на секунду.

Додати водяний знак

ffmpeg -i відео.mp4 -i лого.png -filter_complex "overlay=W-w-20:H-h-20" з_лого.mp4

Логотип потрапить у правий нижній кут із відступом у 20 пікселів. Для лівого верхнього кута запиши overlay=20:20.

Субтитри

ffmpeg -i відео.mp4 -vf subtitles=субтитри.srt вшиті.mp4
ffmpeg -i відео.mp4 -i субтитри.srt -c copy -c:s mov_text окремі.mp4

Перша команда вшиває субтитри в картинку назавжди, друга додає їх окремою доріжкою, яку глядач може вимкнути.

Вирівняти гучність

ffmpeg -i відео.mp4 -af loudnorm -c:v copy нормалізовано.mp4

Фільтр loudnorm вирівнює сприйману гучність за стандартом, який використовують стрімінгові сервіси. Корисно, якщо відео з різних джерел звучать по-різному.

Обробити багато файлів одразу

У Linux і macOS це зручно робити циклом у терміналі. Наприклад, перетворити всі MKV у теці на MP4:

for f in *.mkv; do
    ffmpeg -i "$f" -c copy "${f%.mkv}.mp4"
done

Зверни увагу на лапки навколо $f: без них назви з пробілами розвалюються. Про змінні, лапки й цикли докладно я розписав у статті змінні в Bash. У командному рядку Windows цикл виглядає так:

for %f in (*.mkv) do ffmpeg -i "%f" -c copy "%~nf.mp4"

Швидше кодування за допомогою відеокарти

Якщо відеокарта вміє апаратне кодування, замість libx264 можна вказати апаратний кодек: h264_nvenc для NVIDIA, h264_qsv для вбудованої графіки Intel чи h264_vaapi у Linux. Кодування стає в рази швидшим, але за тією самою якістю файл виходить трохи більшим, ніж у процесорного кодування.

Типові помилки

  • «Unknown encoder». Твоя збірка FFmpeg не має потрібного кодека. Встанови повнішу збірку.
  • Пробіли в назвах файлів. Бери імена файлів у лапки: -i "мій файл.mp4".
  • Файл уже існує. FFmpeg чекає відповіді: введи y або додай ключ -y.
  • Звук не відтворюється в MP4. Не всі аудіокодеки підтримуються в цьому контейнері. Перекодуй звук: -c:a aac.

Що далі

Якщо не хочеш запам'ятовувати команди, спробуй програми-оболонки: я розповідав про найкращий відеоконвертер для Linux та безкоштовний відеоконвертер для Windows. А записати екран і відразу обробити відео допоможуть найкращі програми для запису екрану в Linux.

Більше про це – за позначками FFmpeg та Конвертери файлів.

Яка команда FFmpeg виручає тебе найчастіше? Пиши в коментарях 🙂