Matlab vision.VideoFileWriter output is too big

1.4k views Asked by At

I'm using Computer Vision System Toolbox in Matlab (R2015a, Windows7) to mask frames in the video file and write them into a new video file. By masking, I replace about 80% of the image with 0s and 1s:

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);  

The size (1080 x 1920 x 3) and the format (single) of the original and modified frames remain the same. Yet the masked videos are much bigger than the original ones, e.g. 1GB original video turns into nearly 4GB after masking. These large new files can not be opened (Windows 7, VLC media). Handbrake does not recognize them as a legit video file either.

When I mask only about 20% of the image, the masked video still come out large (up to 2.5Gb), but I have no problem opening these.

I tried adding 'VideoCompressor', 'MJPEG Compressor', but this gives a warning.

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.

We have TBs of video data to deidentify, so any suggestion would be much appreciated. Thanks!

2

There are 2 answers

2
Dinesh Iyer On

Larissa,

The size of the output MPEG-4 file can be controlled by adjusting the Quality parameter of the system object. This is a value from 0-100 which controls the output bitrate. So, higher the quality, larger the file. The default value is 75. The system object uses the Microsft API's to create MPEG-4 files.

Secondly, you need to call release(videoFileWriter) to complete writing the file. I just want to confirm that you are doing it and have just omitted it for the purposes of this code snippet.

The VideoCompressor property is not valid for MPEG-4 file format because the compressor to be used is fixed. You can choose that property only when you write out AVI files. However, you probably will not reach the same level of compression as MPEG-4.

Hope this helps.

Dinesh

0
jkazan On

Download ffmpeg here:https://git.ffmpeg.org/ffmpeg.git

For windows, open a bash terminal and run:

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

For unix, do similar but download the appropriate build of ffmpeg.

I tried on a 7.90GB folder and got a 6.4MB .mkv-file. Works like a charm!