Формат выходного файла ffmpeg

При использовании ffmpeg для вывода серии кадров в виде изображений единственный формат, который я могу найти для документации, frame_%d.jpg. Идентификатор %d заменяется последовательным числом кадров.

Существуют ли другие параметры, которые я могу использовать в формате выходного файла? В частности, мне нужна возможность добавить временную метку определенного фрейма.

Ответ 1

Оказывается, это поведение еще не было реализовано в то время.

Я реализовал начальную версию поддержки %t на своей вилке FFmpeg (https://github.com/yuvadm/FFmpeg), и в настоящее время я работаю над очисткой патча, чтобы он могут быть объединены вверх по течению.

Ответ 2

Опция strftime позволяет вам расширять имя файла с указанием даты и времени. Проверьте документацию функции strftime() для синтаксиса.

Например, чтобы сгенерировать файлы изображений из шаблона strftime() %Y-%m-%d_%H-%M-%S, можно использовать следующую команду ffmpeg:

ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"

Ответ 3

Я взломал bash script, который создает имена файлов в зависимости от времени в фильме. Он использует формат: "hh_mm_ss" в имени файла. Вы можете увидеть его по адресу:

https://github.com/pozar/makemoviethumbs

Ответ 4

Другой вариант, который у вас был бы, - запустить ffprobe -show_packets на нем и использовать эти данные, чтобы "вывести" временную метку каждого сгенерированного файла jpg (при условии, что вы создаете один на каждый входящий видеокадр). Хлоп!

Ответ 5

Для количества кадров можно использовать отчет со специальным режимом отладки:

FFREPORT=file=\'file.log\':level=48 && ffmpeg ... -vf select=eq(pict_type\,PICT_TYPE_I) -vsync vfr -f image2 OUTPUT

то вы можете сопоставить имя с preg_match_all:

preg_match_all("/] n:(\\d+)\\.[^>]+pict_type:I/Us",$log,$m,PREG_PATTERN_ORDER,5000);
$frames=$m[1];

Пожалуйста, наслаждайтесь!