Here is a basic solution.
//if the graph is given in input:
// If any bridge exists in the graph:
// return any spanning tree from the list of input spanning trees
while the size of result set is less than |V|-1:
for every tree in the list of spanning trees:
for every edge in the tree:
if edge is not a part of result set:
if adding this edge to the result set doesn't form a cycle:
add the edge to result set
break
if size of result set is V-1:
break
- Size of list of spanning trees < |V|-1: while loop is required
- Size of list of spanning trees > |V|-1: a proof would be required that "the result set returned by above algorithm includes at least one edge from all the remaining trees in the list of spanning trees". I'll try this proof at leisure.
If for the given graph |E| < 2*(|V|-1) or the size list of spanning trees < |V|, then the above algorithm definitely works.
An interesting case is when |E| >= 2*(|V|-1). As shown in the image below, for some input list of spanning trees L, say the set of green edges is the result set returned by the above algorithm. A spanning tree of Blue edges could be formed without using any of the green edges.

Just posted this answer so that it works as some basic ground work for people trying to answer this question. Otherwise, could be treated as brute force solution.