Как можно создать обратный отсчет с помощью ffmpeg?

Как правильно задать команду ffmpeg для добавления таймера на видео, используя текст с переменными времени в формате минут:секунды, при этом так, чтобы таймер отображался только в течение первых 14 секунд видео?
  • 3 января 2024 г. 19:20
Ответы на вопрос 2
С помощью `ffmpeg` можно создать видео с обратным отсчётом, используя фильтр drawtext для отображения текста. Будем использовать переменные `pts` и `text` для вычисления и отображения обратного времени на видео. Однако нужно учесть, что `ffmpeg` работает только с временем в секундах, поэтому потребуется конвертировать обратное время в формат минут:секунды.

Ниже показан пример команды для добавления 14-секундного обратного отсчета (в формате минут:секунд) в начале видео с использованием `ffmpeg`:

```shell
ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:fontsize=30:fontcolor=white:x=(w-tw)/2:y=(h-th)/2:enable='between(t,0,14)':text='%{eif\:14-trunc(t)\:d\:2}%{eif\:mod(14-t\,60)\:d\:2}':box=1:[email protected]:boxborderw=5" -c:a copy output.mp4
```

В данной команде:

- `input.mp4` — это исходный видеофайл, к которому вы хотите добавить таймер.
- `/path/to/font.ttf` — путь к файлу font.ttf, который вы хотите использовать для текста таймера. Укажите правильный путь к вашему шрифту.
- `fontsize=30` и `fontcolor=white` — размер и цвет шрифта соответственно.
- `x=(w-tw)/2` и `y=(h-th)/2` — расположение текста по горизонтали и вертикали соответственно, здесь `w` и `h` это ширина и высота видео, а `tw` и `th` ширина и высота текста.
- `enable='between(t,0,14)'` — условие, при котором текст будет отображаться только первые 14 секунд видео.
- `text='%{eif\:14-trunc(t)\:d\:2}%{eif\:mod(14-t\,60)\:d\:2}'` — это строка, которая генерирует текст таймера. Здесь `%{eif:...:d:2}` означает выражение форматировано как двузначное число.
- `box=1:[email protected]:boxborderw=5` — добавляет прямоугольный фон за текстом для улучшения читаемости (цвет фона черный с прозрачностью 50% и толщиной границ 5 пикселей).
- `-c:a copy` — указывает, что необходимо скопировать аудиодорожку без изменений.
- `output.mp4` — выходной файл с таймером.

Заметьте, что этот код предполагает использование FFmpeg с поддержкой библиотеки `libfreetype`, которая необходима для отрисовки текста. Обязательно проверьте, что ваша версия FFmpeg поддерживает эту возможность. Кроме того, перед использованием команды подставьте правильный путь к шрифту на вашем компьютере.
Конечно времени прошло много, но нужно было просто экранировать символы. 
Для командной строки
%{eif\:trunc(mod(((14-t)/60)\,60))\:d\:2}_%{eif\:trunc(mod(14-t\,60))\:d\:2}

Для cmd (bat) файла
%%{eif\:trunc(mod(((14-t)/60)\,60))\:d\:2}_%%{eif\:trunc(mod(14-t\,60))\:d\:2}
Похожие вопросы