Harrowing historical drama 12 Years a Slave was crowned best picture Oscar, while 3D space thriller Gravity was the top prize winner at the 86th Academy Awards with seven.
True-life AIDS activist drama Dallas Buyers Club won three Oscars including best actor for Matthew McConaughey, while Australia's Cate Blanchett won best actress for Woody Allen's Blue Jasmine.
But 1970s crime caper American Hustle and Martin Scorsese's The Wolf of Wall Street went home empty-handed from the Oscars, the climax of Hollywood's annual awards season.
12 Years a Slave won three Oscars overall: best picture, best adapted screenplay and best supporting actress for Kenya's Lupita Nyong'o for her searing turn as a brutalised slave.
He made history as this is the the first movie from a black director to win the film industry's highest honour in 86 years of the Oscars.
Mexican Alfonso Cuaron won best director for Gravity, which took six other prizes: best visual effects, sound editing, sound mixing, cinematography, film editing and original score.
As widely expected, Jared Leto won the best supporting actor Oscar for his fearless portrayal of a transgender woman suffering from AIDS in Dallas Buyers Club.
The actor and rock musician used his acceptance speech to send a topical message to people in troubled Ukraine and anti-government protesters in Venezuela.
"To all the dreamers out there... in places like Ukraine and Venezuela, I want to say, we are here. And as you struggle to make your dreams happen, to live the impossible, we're thinking of you tonight," Leto said.
Dallas Buyers Club also won the make-up and hairstyling award.
Standing ovation for Nyong'o
A tearful Nyong'o -- who turned 31 on Saturday -- earned a standing ovation as she took the stage to accept her prize.
She paid tribute to her slave character Patsey, saying: "It doesn't escape me for one moment that so much joy in my life is thanks to so much pain in someone else's."
Disney's blockbuster musical hit Frozen won best animated feature -- the studio's first since the category was introduced in 2002 -- as well as best original song for Let It Go.
Italy's The Great Beauty won best foreign language movie, beating fellow nominees from Belgium, Cambodia, Denmark and Palestine.
Before the show, Hollywood's finest paraded on the red carpet, mercifully dry after storm clouds lifted.
Praise for Ellen DeGeneres
Host Ellen DeGeneres opened with a monologue making fun of the storms that hit California on the eve of the Oscars.
"It's been a tough couple of days for us here. It has been raining," she said, addressing the global audience of hundreds of millions. "We're fine. Thank you for your prayers," she dead-panned.
In a generally well-received second outing as Oscars host, DeGeneres set Twitter ablaze when a "selfie" photo she took with stars including Brad Pitt, Meryl Streep and Jennifer Lawrence went viral.
By the end of the show, it had more than 2.1 million retweets, shattering the previous record for the most retweeted message.
This year's Oscars race was one of the most fiercely contested for decades, as a pack of outstanding films campaigned for the ballots of the Academy of Motion Picture Arts and Science's 6,000 voting members.
The best picture race had been so close that the winner could have come down to only a few votes, under the Academy's preferential voting system.
Under the rules, voters ranked all nine nominated films: American Hustle, Captain Phillips, Dallas Buyers Club, Gravity, Her, Nebraska, Philomena, 12 Years a Slave and The Wolf of Wall Street.
Those with the least first-place votes were dropped, and their votes given to the next highest-ranked nominees. This continues until one movie had 50% plus one vote.
Sunday's star-studded Oscars broadcast featured performances by Irish rockers U2, playing their nominated song from Mandela: Long Walk to Freedom and by Idina Menzel, who sang the Oscar-winning Let It Go from Disney's Frozen.
It also celebrated the 75th anniversary of The Wizard of Oz with a reunion of Judy Garland's three children Liza Minnelli, Lorna Luft and Joey Luft, while Pink sang Over the Rainbow.