Defending champions Germany will again meet Spain in the Under-21 European Championship final after both won their semifinals on Thursday.
Spain lost 1-0 to Germany in the 2017 final and will now have their chance for revenge in Udine on June 30.
In the first semifinal in Bologna, Amiri gave Germany the lead in the 21st minute after racing from inside his own half but George Puscas leveled from the spot following a foul by Timo Baumgartl on Ianis Hagi.
And Romania, who were making only their second appearance in the competition, took the lead on the stroke of half-time when Puscas headed home.
Germany leveled shortly after the break when Waldschmidt converted a spot kick after Hagi was penalized for pulling on Mahmoud Dahoud's shirt.
As the match appeared headed for extra time Germany scored after Amiri backheeled a free kick into Waldschmidt's path and the Freiburg forward fired into the bottom right corner.
It got worse for Romania as defender Alex Pascanu was sent off for a last-man foul on Lukas Nmecha and Amiri sealed the match with another free kick.
There was also a penalty for each side in Reggio Emilia.
Jean-Philippe Mateta gave France the lead from the spot in the 16th after Junior Firpo pushed over Jeff Reine-Adelaide.
But Marc Roca equalised when he tapped in a rebound and Mikel Oyarzabal fired Spain in front with a penalty in first-half stoppage time after being tripped by Ibrahima Konate.
Dani Olmo extended Spain's advantage immediately after the break and substitute Borja Mayoral scored four minutes after coming off the bench.