I've encountered some of the problems you are seeing. My app is a windows standalone program talking/commanding OBS thru a web socketso many things that can go wrong using the timestamp version
what i have found is that you lose about 4-6 seconds between fade out and fade back in... but it looks much better with the fades... FFMPEG has some overhead i cant do anything about. I have to check the next time and calculate when to start the fadeout and the length b4 next video .
it is all the code to check times that causes about 2-3 seconds of delay. this method does make sure your shows start at 12:00:00 it will start at 12:03 and end at 12:57 making sure the next starts correctly. it also seeks ahead 2-3 seconds just to be safe
The alternative is just do all the work and be sure all videos are exactly as you want, load them up in playlist and get about 2-3 seconds of delay. this does ZERO calculations just plays it as is so you could have stuff that runs over the time you'd like so if you want to have a show start at 12:00:00 this method could have you starting at 12:03 and throughout the day have you 1-2 minutes out of whack. no seeking of time and if its 60 long the next video would start at say 13:06 and next hour at 14:12
the timestamp version sticks with the 12:03 start/fade-in and end at 12:57:00 fade out . EVERY hour or how ever you shows run
so I have two versions... 1 less work 2-3 seconds extra between videos and 1 that is more work to be sure all videos are EXACT times you want
. In the player, I know what is coming up next. I'm using object oriented programming so, I create a couple of instances of objects that contain all the info to run a program/time slot. After starting the current running program, I have my program get the next scheduled instance/program/video ready to go. this includes video length etc.
In the scene, I have the a ffmpeg or vlc source ready to go. Above it in the scene list is another source loaded with a black jpeg. This I can send commands to, to get it to fade to black and back out again. I set the black source to opacity to 100 to block the source I wish to run. I then start the running video and wait 1/2 second and the start the black source to full transparency. There is a plugin that you can use to do this. I just send the commands myself. I also mute the running video for 1/2 second so as to not get annoying startup clicks and noises.
I know when the video will end, so schedule the black jpeg to fade to 100% opacity over about a seconds time timed to hit the video end correctly. Basically, I'm loading and starting a vlc source but controlling fade in/out myself using the black jpeg source.