I remember having problem with this. Thake what is in the description of gdalbuildvrt for example, and I cote:
"If there is some amount of spatial overlapping between files, the order of files appearing in the list of source matter: files that are listed at
the end are the ones from which the content will be fetched."
It seems that gdal does not know what is an image or lack of image (black). As all of the images have black areas no mather order you use it will result
in an image with a black area when merging.
To solve that I process them separetelly, including cutting then, then I select what tiles from each sattelite image I will use in the mosaic. This way you will have a beatyful mosaic.
I had problem, though, generating the finals bmp tiles with gdal, maybe the way pstrzel does.
Another problems is the resolution of 30m, I did not succeed in fusing the colored images with the 15m Landsat monocromatic image to generate a 15m colored image. And, still, 15m is a lot.