Формат выходного файла 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];
Пожалуйста, наслаждайтесь!