Я хочу найти способ устранить повторяющиеся кадры из видео. Если я рассматриваю видео, в котором будет неоднократно отображаться один и тот же кадр в течение 5 секунд, я хочу включить в видео только один кадр и сделать его видимым в течение 5 секунд. Здесь я с нетерпением жду возможности минимизировать размер файла, удалив дубликаты кадров. Есть ли способ сделать это с помощью Matlab?
Кодируйте видео, удаляя повторяющиеся кадры — Matlab
Ответы (1)
Если ваш фильм представляет собой серию кадров, которые вы хотите показать в виде слайд-шоу/презентации с фиксированной пятисекундной задержкой, вы должны иметь возможность использовать 'FrameRate'
для свойства VideoWriter
. Попробуйте что-то вроде этого примера:
writerObj = VideoWriter('peaks.mp4','MPEG-4');
writerObj.FrameRate = 0.2; % One frame every 5 seconds
open(writerObj);
Z = peaks;
surf(Z);
for k = 1:4:20
surf(sin(2*pi*k/20)*Z,Z);
writeVideo(writerObj,getframe);
end
close(writerObj);
Однако свойство частоты кадров не может изменяться в течение фильма, поэтому более общая форма вашего вопроса в основном связана с поддержкой кодировщика для кодирование с переменной частотой кадров. Большинство современных кодировщиков (например, реализации H.264) не предназначены для явной обработки этого, а скорее имеют эвристику, которая может обнаруживать, когда содержимое не изменяется, и эффективно кодировать данные (особенно если используется многопроходное кодирование). К сожалению, Matlab (я предполагаю, что вы использовали класс VideoWriter
) на самом деле не обеспечивает большой точности в этом отношении. Я даже не уверен, какие настройки межкадрового кодирования используются для MPEG-4 с видео H.264.
Если создано MPEG-4 с видео H.264, by VideoWriter
неприемлемы, я бы рекомендовал экспортировать ваше видео в максимально возможном качестве (или без потерь), а затем научиться использовать полноценную среду кодирования/библиотеку (ffmpeg, libav, x264) или приложение для кодирования с желаемым качеством и размером. По-видимому, Handbrake поддерживает кодирование с переменной частотой кадров, хотя оно не обязательно предназначено для того, что вам может понадобиться, я не тестировал его. Или экспортируйте свои отдельные неподвижные кадры и используйте программное обеспечение для редактирования видео (например, iMovie на OS X). Также, вероятно, есть специальные приложения, которые могут создать фильм из слайд-шоу/презентации (это могут делать и PowerPoint, и Keynote).
Другой альтернативой в Matlab является использование кодека, явно поддерживающего переменную частоту кадров, — кодеков на основе изображений: Photo JPEG (не путать с Motion-JPEG), Photo PNG (он же Apple PNG) и Photo TIFF (он же Apple Tiff). Вы можете кодировать контент напрямую с помощью этих кодеков с помощью моего QTWriter
, т. е. доступно на Github. Однако обратите внимание, что в OS X 10.9+ QuickTime Player преобразует фильмы Photo PNG и Photo TIFF с переменной частотой кадров без потерь в H.264 с фиксированной частотой кадров с потерями (фильмы Photo JPEG не преобразуются). Дополнительные сведения и обходной путь см. в моем примечании внизу этой страницы.
for how long to display this frame
к каждому кадру и проигрывателю, который сможет это обработать. - person Hoki   schedule 19.10.2014