The code below generates the embedded video above:
In[]:=
ClearAll["`*"]
In[]:=
PacletInstall["JasonB/RectanglePacking"]
Out[]=
PacletObject
Name: JasonB/RectanglePacking
Version: 1.0.0

In[]:=
Needs["JasonB`RectanglePacking`"]
In[]:=
stl[s_]:=ToString[Style[s,Red,FontFamily->"Alegreya SC"],StandardForm]
In[]:=
ClearAll[packers]​​SeedRandom@7;​​rects=RandomInteger[{5,19},{400,2}];​​methods=Take[$RectanglePackingMethods,4];​​packers=RectanglePacker[{300,190},#]&/@methods;
Compare the area of all rectangles and the bin -- the later should be slightly less:
In[]:=
SeedRandom@7;​​{300×190,Times@@@RandomInteger[{5,19},{400,2}]//Total}
Out[]=
{57000,58380}
In[]:=
frames=Block[{plots,getlabel},​​getlabel=StringTemplate[stl@"method:"<>" `1`, "<>stl@"occupancy:"<>" `2`"];​​Table[plots=MapThread[(#1["Insert",rect];#1["Graphics",PlotLabel->getlabel[#2,Round[#1["Occupancy"],.0001]],ImageSize->250,ColorFunction->"BrightBands"])&,{packers,methods}];​​GraphicsGrid[Partition[plots,2],Spacings->{-15,5},ImageSize->500],{rect,rects}]​​];//AbsoluteTiming
Out[]=
{165.721,Null}
In[]:=
Manipulate[frames[[k]],{k,1,400,1}]
Out[]=
In[]:=
frames//Length
Out[]=
400
In[]:=
framesR=ParallelMap[Rasterize[#,RasterSize2000]&,frames];
Parallelize@FrameListVideo[framesR,FrameRate->20,RasterSize->{Automatic,1080}]