Документация по ключам программы: 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
распознается программой без проблем, и делается анимированный файл.
-
обрезаем кадр -
-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