#python #video #mjpeg
#python #Видео #mjpeg
Вопрос:
Я программирую это на Python. У меня есть куча файлов JPEG и их временные метки в базе данных. Они не совсем периодические (частота кадров немного нестабильна, /- несколько миллисекунд на кадр). Я хочу запросить базу данных и создать файл MJPEG, который я могу сохранить на диск и ffmpeg
при желании перекодировать. Как мне это сделать (не нужен код, просто несколько комментариев высокого уровня, если это возможно, какие модули, если таковые имеются, использовать и т.д.)?
Комментарии:
1. Я сам не использую Python, но посмотрите, поможет ли логика моего ответа вам найти решение.
Ответ №1:
Вы можете динамически создавать видеокадры в FFmpeg, отправляя данные RGB из Python.
Почему бы просто не прочитать файлы JPEG и не отправить их декодированные данные RGB в FFmpeg для создания видеофайла H264? Видеокадры H264 позже могут быть помещены в контейнер MP4 вместе с любым звуком, субтитрами и т. Д.
Вам нужно запустить FFmpeg как процесс на Python, а затем записать массив байтов RGB в стандартный идентификатор процесса. Каждая запись создает кадр, поэтому, если вам нужно отобразить изображение в течение стольких миллисекунд, вы просто вычисляете, сколько раз отправлять один и тот же массив RGB.
Например, если вы настроили FFmpeg на вывод видео со скоростью 30 кадров в секунду и хотите, чтобы JPEG отображался в течение 2 секунд, вы записываете одни и те же декодированные данные RGB в формате JPEG 60 раз (используя a for-loop
).
Идеальная функция выглядит так writeFrame (rgbData, numTimesToWrite);
, где numTimesToWrite
было бы 60. Затем для использования вы просто декодируете JPEG в RGB, а затем вводите в эту функцию количество кадров для записи. Поскольку скорость составляет 1000 мс в секунду, любой 1 кадр представляет около 33 миллисекунд выходного видео.
- Смотрите Этот учебник по Python, чтобы получить представление о написании фреймов. Вам нужно ввести
pipe.proc.stdin.write
функцию, которая вызывается всякий раз, когда вы хотите записать фрейм. - Вот как я это сделал (см.
function makeVideoFrame()
Идеи), используя язык ActionScript-3 (это может сделать любой язык со стандартными функциями ввода / вывода).