Skip to content

Instantly share code, notes, and snippets.

@1234ru
Last active February 9, 2024 09:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 1234ru/774a815d5dfc27ed0a5987058105efcd to your computer and use it in GitHub Desktop.
Save 1234ru/774a815d5dfc27ed0a5987058105efcd to your computer and use it in GitHub Desktop.

Документация по ключам программы: http://ffmpeg.org/ffmpeg.html

Указываем файл-источник, начало и конец целевого отрезка

ffmpeg -i видеофайл -ss чч:мм:сс -to чч:мм:сс ...
  • -ss - начало целевого отрезка (можно без часов и минут, можно с долями секунды - чч:мм:сс.тысячные)
  • -to - конец целевого отрезка

Здесь и далее часть ffmpeg -i видеофайл -ss чч:мм:сс -to чч:мм:сс будет заменена на {.}. Все настройки, указанный следом за ней, будут относиться к выходному файлу.

Вытащить часть звуковой дорожки

{.} аудио.mp3

Заглушить звук на отрезке

{.} -af "volume=enable='between(t,с,по)':volume=0" -vcodec copy

volumne=enable означает включение регулировки громкости, частным случаем которой является нулевой уровень. Временной интервал можно указывать в виде формул, типа (t,5*60,5*60+0.5) (заглушить полсекунды, начиная с пятой минуты видео).

Указание -vcodec copy не обязательно, но повышает скорость выполнения команды во много раз.

Источник: https://stackoverflow.com/a/29222419

Сдвиг звуковой дорожки

https://superuser.com/a/983153

Изменение размеров кадра.

Указание новых размеров кадра делается с помощью фильтра -vf scale=ширина:высота.

Ширину и высоту можно указывать либо полностью явно:

{.} -vf "scale=1280:720" ...

Либо с сохранением пропорций:

{.} -vf "scale=1280:-1" ...

А также в пропорции от исходных размеров - с помощью переменных iw и ih (умножение на 0.5 и деление на 2 - синонимы):

{.} -vf "scale=iw*.5:ih/2"

Подробнее o scaling: ffmpeg wiki, официальная документация.

Обрезка видео до заданной прямоугольной области кадра (crop)

ffmpeg -i in.mp4 -filter:v "crop=ширина:высота:x:y" out.mp4

x и y - координаты верхнего левого угла области

Можно использовать выражения вида crop=406:720-270:0:270.

Предварительный просмотр результата возможен в реальном времени с помощью ffplay:

ffplay -i input -vf "crop=..."

Источник: https://video.stackexchange.com/a/4571

Горячие клавиши и ключи запуска ffplay.

GIF-анимации

Расширение .gif распознается программой без проблем, и делается анимированный файл.

  • обрезаем кадр - -filter:v "crop=ширина:высота:смещение_по_x:смещение_по_y.
    Например, взять область размерами 420х240, верхний угол которой имеет координаты x = 70, y = 30:
    {.} -filter:v "crop=420:240:70:30" {файл.gif} См. stackexchange.com.

  • понижаем частоту кадров - -r частота; стандартная частота наследуется из видео (24, 30 или 60 кадров в секунду), при указании меньшего числа часть кадров будет пропущена, а общая длительность анимации сохранена, что даст меньший размер итогового файла; для небольших по размеру "холста" анимаций можно безболезненно понижать частоту до 8-12 кадров в секунду:
    {.} -r 12 файл.gif
    Важно использовать это именно как параметр вывода! При использовании в качестве параметра ввода (до ключа -i) программа сработает без ошибок, создав, однако, анимацию в замедленном действии и из неправильного временного отрезка (в соответствии с замедлением).

    Замедлить анимацию, увеличив задержку между кадрами, с помощью ffmpeg не получится. Для этого нужно использовать gifsicle.

Простое объединение файлов

Команде требуется список объединяемых файлов в специальном формате:

file файл-1
file 'файл 2'

(Использовать можно только одинарные кавычки, не двойные.)

ffmpeg -f concat -i (файл списка) (файл-результат)

Внимание! Таким способом можно объединять только файлы с одинаковыми разрешением и частотой кадров. В случае необходимости предварительно сконвертировать файлы, приведя эти значения к нужным величинам с помощью параметров -r (частота кадров) и -vf "scale=...".

Если добавить команде ключи -vcodec copy и -acodec copy, она выполнится очень быстро, т.к. не будет пережатия исходных файлов.

Существует возможность ковенртации налету вместе с объединением, однако команды для этого более сложны.

Команда с циклом для прохода по всем файлам в папке - https://stackoverflow.com/a/41387530/589600 (см. Addendum). Подходит для mp4. Выше в ответах приводятся способы для других видов файлов.

Скриншот

ffmpeg -ss чч:мм:сс -i (видеофайл) -frames:v 1 (скриншот).jpg

-frames:v N - количество кадров видео (v - video, еще есть d - data), которые нужно извлечь, в данном случае - 1.

См. https://stackoverflow.com/a/27573049/589600.

Изменение соотношения сторон

За соотношение сторон отвечает специальный аргумент -aspect:

{.} -aspect "16:10"

Соотношение можно задавать также в виде числа (например, -aspect 1.6).

Поворот

Поворот по часовой стрелке на 90 градусов:

{.} -vf "transpose=1"

Поворот на 180 градусов:

{.} -vf "transpose=2,transpose=2"

Другие варианты описаны на stackoverflow.

Убрать звук

{.} -c copy -an

Вырезать/убрать из файла несколько кусков

https://superuser.com/a/682534

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment