ffmpeg разбивает avi на кадры с известной частотой кадров - PullRequest
21 голосов
/ 12 октября 2010

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

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

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 файла. Как я могу получить исходные 149 тыс. кадров?

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

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

, но это, похоже, не решило мою проблему.

Ответы [ 3 ]

36 голосов
/ 12 октября 2010
ffmpeg -i myfile.avi -r 1000 -f image2 image-%07d.png

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

11 голосов
/ 28 декабря 2010

Первая часть вашей математики хороша, 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"

0 голосов
/ 06 сентября 2017

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...