1

Я использую Computer Vision System Toolbox в Matlab (R2015a, Windows7) для маскировки кадров в видеофайле и записи их в новый видеофайл. По маскирования, я заменить около 80% изображения с 0 и 1:Matlab vision.VideoFileWriter output is too large

videoFileReader = vision.VideoFileReader(fin); 
videoFileWriter=vision.VideoFileWriter(fout, ... 
    'FileFormat', 'MPEG4', 'FrameRate', videoFileReader.info.VideoFrameRate); 
frame = step(videoFileReader); 
frame_new=mask(frame); %user function 
step(videoFileWriter, frame_new); 

Размер (1080 х 1920 х 3) и формат (один) из исходных и модифицированных кадров остаются неизменными. Однако видео в маске намного больше, чем оригинальные, например. 1GB оригинальное видео превращается в почти 4 ГБ после маскировки. Эти большие новые файлы не могут быть открыты (Windows 7, VLC media). Handbrake не распознает их как законный видеофайл.

Когда я маскирую только около 20% изображения, замаскированное видео по-прежнему выходит большое (до 2,5 ГБ), но у меня нет проблем с их открытием.

Я попытался добавить «VideoCompressor», «MJPEG Compressor», но это дает предупреждение.

videoFileWriter=vision.VideoFileWriter(fin, 'FileFormat', 'MPEG4', ... 
'FrameRate', videoFileReader.info.VideoFrameRate, 'VideoCompressor', 'MJPEG Compressor'); 
<...> 
Warning: The VideoCompressor property is not relevant in this configuration of the System object. 

У нас есть ТВ-данные видеоданных, чтобы идентифицировать, поэтому любое предложение было бы высоко оценено. Спасибо!

+1

Вы маскируете все рамки равномерно? С маской вы получаете локальное сжатие, но вы можете потерять некоторую корреляцию между кадрами по краям маски. – Navan

+0

@Navan - Согласен. – rayryeng

+0

Я применяю тот же алгоритм ко всем кадрам, который считается однородным? Маскированные части - 0/1, но есть небольшие изменения от кадра к кадру в замаскированных областях. – Larissa

ответ

0

Лариса,

Размер выходного MPEG-4 файла можно регулировать путем регулировки параметра качества объекта системы. Это значение от 0 до 100, которое контролирует выходной бит. Таким образом, чем выше качество, тем больше файл. Значение по умолчанию - 75. Системный объект использует API-интерфейс Microsft для создания файлов MPEG-4.

Во-вторых, вам нужно вызвать release (videoFileWriter), чтобы завершить запись файла. Я просто хочу подтвердить, что вы это делаете, и просто опустил его для целей этого фрагмента кода.

Свойство VideoCompressor недопустимо для формата файла MPEG-4, поскольку используемый компрессор является фиксированным. Вы можете выбрать это свойство только при записи файлов AVI. Однако вы, вероятно, не достигнете такого же уровня сжатия, как MPEG-4.

Надеюсь, это поможет.

Динеш

+0

Dinesh, спасибо за ввод. Файлы освобождаются, так что это не проблема. Где указать параметр качества? Это не похоже на вариант в Vision.VideoFileWriter. – Larissa

+0

videoFileWriter = зрение.VideoFileWriter (fin, 'FileFormat', 'MPEG4', 'Quality', 20); Похоже на ошибку в документации о том, что они не перечисляют ее :( Попробуйте помощь vision.VideoFileWriter –

0

Скачать FFmpeg здесь: https://git.ffmpeg.org/ffmpeg.git

Для окон, откройте Баш терминал и выполните команду:

cat <path to folder with images>/*.png | <path to ffmpeg bin folder>/ffmpeg.exe -f image2pipe -i - output.mkv 

Для Unix, сделать то же, но загрузить соответствующий сборку FFmpeg.

Я пробовал папку 7,90 ГБ и получил файл 6.4 МБ .mkv. Работает как шарм!