Искам да намеря метод за премахване на повтарящите се кадри от видеоклип. Ако разглеждам видеоклип, който многократно ще показва един и същ кадър за 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 видеоклипове създаде от 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 с фиксирана кадрова честота на загуби (JPEG филмите на снимки не се конвертират). Вижте моята бележка в долната част на тази страница за допълнителни подробности и заобиколно решение.
for how long to display this frame
метаданни към всеки кадър и плейър, който може да се справи с това. - person Hoki   schedule 19.10.2014