Подтвердить что ты не робот

Ffmpeg split avi в рамки с известной частотой кадров

Я разместил это как комментарии в этом связанном потоке. Однако они, похоже, остались незамеченными = (

Я использовал

ffmpeg -i myfile.avi -f image2 image-%05d.bmp

чтобы разделить myfile.avi на фреймы, хранящиеся в виде файлов .bmp. Казалось, что это работает, кроме не совсем. При записи моего видео я записывал со скоростью 1000fps, и видео оказалось 2min29sec длинным. Если моя математика правильная, это должно составлять в общей сложности 149 000 кадров для всего видео. Однако, когда я бежал

ffmpeg -i myfile.avi -f image2 image-%05d.bmp

Я получил только 4472 файла. Как я могу получить оригинальные кадры 149k?

Я также попытался преобразовать частоту кадров моего оригинального AVI в 1000 кадров в секунду, выполнив

ffmpeg -i myfile.avi -r 1000 otherfile.avi

но это, похоже, не повлияло на мою озабоченность.

4b9b3361

Ответ 1

ffmpeg -i myfile.avi -r 1000 -f image2 image-%07d.png

Я не уверен, что вывод 150 тыс. бит файлов будет хорошей идеей. Возможно, png достаточно хорош?

Ответ 2

Первая часть вашей математики хорошая, 2 минуты и 29 секунд - около 149 секунд. С 1000 кадров в секунду, что составляет 149000 кадров. Однако ваше имя выходного файла имеет только 5 позиций для числа, где 149000 имеет 6 позиций, поэтому попробуйте "image-% 06d.bmp".

Тогда есть размер диска: Ваши изображения подходят на диск? С bmp каждое изображение использует свой собственный размер. Вы можете попытаться использовать jpeg-изображения, они сжимают примерно в 10 раз лучше.

Другая идея: если ffmpeg не находит (разумную) частоту кадров, она падает до 25 или 30 кадров в секунду. Возможно, вам нужно будет указать его. Сделайте это как для источника, так и для цели, см. Справочную страницу (man ffmpeg в unix):

   To force the frame rate of the input file (valid for raw formats
   only) to 1 fps and the frame rate of the output file to 24 fps:
           ffmpeg -r 1 -i input.m2v -r 24 output.avi

Для чего это стоит: я использую ffmpeg -y -i "video.mpg" -sameq "video.%04d.jpg" для разделения моего видео на изображения. -sameq - принудительное jpeg в разумном качестве, -y должно избегать перезаписывать вопросы. Для вас:

ffmpeg -y -r 1000 -i "myfile.avi" -sameq "image.% 06d.jpg"

Ответ 3

Я думаю, здесь есть неправильное представление: выход видеосистемы HS вряд ли будет иметь выходную частоту кадров в 1000 кадров в секунду, но что-то довольно нормальное, как 30 (или 50/60) кадров в секунду. Помимо перегрузки большинства видеопроигрывателей с такой скоростью было бы контрпродуктивно показывать последовательность с той же скоростью, что и в записи. В основном: 1 сек. Вход 1000 кадров в секунду - это что-то вроде 33 сек при выходе 30 кадров в секунду.

Была ли продолжительность записи записанной на самом деле 2:29 мин (в результате получилось видео ~ 82 мин при обычной скорости) или заняло около 4,5 секунд (4472 кадра), что равно 2:29 мин при нормальном воспроизведении?