diff --git a/read.m b/read.m
index a2121ae64c52e8956b45391ee392fffd3ae04c38..6ba48f485cec32d49f883b15e0b98ca99e3b5000 100644
--- a/read.m
+++ b/read.m
@@ -1,4 +1,4 @@
-function frames = read(imgSize,imgRes,varargin)
+function frames = read(varargin)
 %READ Write yuv file from a cell array of frames
 %   READ(frames,'name',name) read yuv file with corresponding to name filename
 %   READ(frames,'recDir',recDir) read from directory recDir
@@ -9,22 +9,51 @@ function frames = read(imgSize,imgRes,varargin)
 %% Parse input parameters
 filename = fullfile(pwd,'sequence');
 
-switch imgSize(3); case 1; subSamp = '400'; case 3; subSamp = '444'; end
-
 p = inputParser; p.StructExpand = true; p.KeepUnmatched = true;
-p.addParameter('filename'   , filename, @ischar);
-p.addParameter('subSamp'    , subSamp , @ischar);
-p.addParameter('bitDepth'   , 8       , @isnumeric);
-p.addParameter( 'inColSpace', 'rgb'   , @ischar);
-p.addParameter('outColSpace', 'ycbcr' , @ischar);
+p.addParameter('filename', filename, @ischar);
+p.addParameter('addInfo' , true    , @islogical);
+
+p.parse(varargin{:});
+
+filename = p.Results.filename;
+addInfo  = p.Results.addInfo;
+
+if addInfo
+    [~,imgSize,imgRes,subSamp,bitDepth] = yuv.name2params(filename);
+else
+    imgSize = [0,0,0];
+    imgRes = [0,0];
+    bitDepth = 0;
+    
+    p.addParameter('imgSize', imgSize, @isnumeric);
+    p.parse(varargin{:});
+    
+    imgSize = p.Results.imgSize;
+    
+    switch imgSize(3)
+        case 1
+            subSamp = '400';
+        case 3
+            subSamp = '444';
+    end
+    
+    p.addParameter('imgRes'  , imgRes  , @isnumeric);
+    p.addParameter('subSamp' , subSamp , @ischar);
+    p.addParameter('bitDepth', bitDepth, @isnumeric);
+    
+    p.parse(varargin{:});
+    
+    imgRes   = p.Results.imgRes;
+    subSamp  = p.Results.subSamp;
+    bitDepth = p.Results.bitDepth;
+end
+
+p.addParameter( 'inColSpace', 'rgb'  , @ischar);
+p.addParameter('outColSpace', 'ycbcr', @ischar);
 
 p.parse(varargin{:});
-params = p.Results;
 
-filename = params.filename;
-subSamp = params.subSamp;
-bitDepth = p.Results.bitDepth;
-inColSpace = p.Results.inColSpace;
+inColSpace  = p.Results.inColSpace;
 outColSpace = p.Results.outColSpace;
 
 precision = ['uint',num2str(max(8,2^ceil(log2(bitDepth))))];
@@ -58,9 +87,9 @@ subImgSize = [numel(xgv),numel(ygv)];
 UV = griddedInterpolant({xgv,ygv},zeros(subImgSize),'linear','nearest');
 
 %% Read frames iteratively
-convname = yuv.params2name(filename,imgSize,subSamp,bitDepth,'.yuv');
+%filename = yuv.params2name(filename,imgSize,imgRes,subSamp,bitDepth);
 
-fileID = fopen(convname,'r');
+fileID = fopen(filename,'r');
 
 imgRes(end+1:2) = 1;
 imgGrid = zeros(imgRes);
@@ -81,17 +110,17 @@ end
 frames = reshape(frames,imgRes);
 
 %% Auxiliary function
-    % Read a single frame of given dimensions
+% Read a single frame of given dimensions
     function frame = readFrame(imgSize)
         frame = fread(fileID,flip(imgSize),['*',precision])';
     end
 
-    % Read a single Y frame
+% Read a single Y frame
     function Y = readY(~)
         Y = readFrame(imgSize(1:2));
     end
 
-    %Read Y, U and V frames
+%Read Y, U and V frames
     function YUV = readYUV(~)
         Y = readFrame(imgSize(1:2));
         UV.Values = double(readFrame(subImgSize));
diff --git a/write.m b/write.m
index 5d8e683fc116453a0859c499910c01e01dffa64a..db113dbc0f4c6b429c0c4376514e772f9a33e182 100644
--- a/write.m
+++ b/write.m
@@ -1,4 +1,4 @@
-function [imgSize,imgRes] = write(frames,varargin)
+function filename = write(frames,varargin)
 %WRITE Write yuv file from a cell array of frames
 %   WRITE(frames,'name',name) use name as yuv filename
 %   WRITE(frames,'refDir',refDir) write in directory refDir
@@ -20,20 +20,30 @@ p = inputParser; p.StructExpand = true; p.KeepUnmatched = true;
 p.addParameter('filename'   , filename, @ischar);
 p.addParameter('subSamp'    , subSamp , @ischar);
 p.addParameter('bitDepth'   , bitDepth, @isnumeric);
+
 p.addParameter( 'inColSpace', 'rgb'   , @ischar);
 p.addParameter('outColSpace', 'ycbcr' , @ischar);
 
+p.addParameter('addInfo'    , true    , @islogical);
+
 p.parse(varargin{:});
 params = p.Results;
 
 filename = params.filename;
-subSamp = params.subSamp;
+subSamp  = params.subSamp;
 bitDepth = p.Results.bitDepth;
-inColSpace = p.Results.inColSpace;
+
+inColSpace  = p.Results.inColSpace;
 outColSpace = p.Results.outColSpace;
 
+addInfo = p.Results.addInfo;
+
 precision = ['uint',num2str(max(8,2^ceil(log2(bitDepth))))];
 
+if addInfo
+    filename = yuv.params2name(filename,imgSize,imgRes,subSamp,bitDepth);
+end
+
 %% Incompatibility
 if imgSize(3)~=1 && imgSize(3)~=3
     error('Unexpected number of channels');
@@ -66,15 +76,13 @@ end
 UV = griddedInterpolant({xgv,ygv},zeros(imgSize(1:2)),'linear','nearest');
 
 %% Write frames iteratively
-convname = yuv.params2name(filename,imgSize,subSamp,bitDepth,'.yuv');
-
 % Check if save folder exists
-convdir  = fileparts(convname);
+convdir  = fileparts(filename);
 if ~exist(convdir,'dir')
     mkdir(convdir);
 end
 
-fileID = fopen(convname,'w+');
+fileID = fopen(filename,'w+');
 
 frames = cellfun(@double,frames,'UniformOutput',false);
 if strcmp(subSamp,'400')