Attention ; ce qui suit dévoile des éléments importants de l'intrigue.
Nina (Natalie Portman) est une danseuse de ballet qui rêve d'obtenir le rôle de « reine des cygnes » dans le célèbre ballet Le Lac des cygnes de Piotr Ilitch Tchaïkovski. Thomas Leroy (Vincent Cassel), le maître de ballet, choisit pour sa nouvelle mise en scène de ne choisir qu'une seule danseuse pour interpréter les deux rôles principaux : Odette, le cygne blanc, et sa jumelle Odile, le cygne noir. Thomas sait Nina parfaite pour danser le cygne blanc (la princesse Odette), mais doute de sa capacité à interpréter également son double maléfique car il pense Nina trop fragile pour danser le cygne noir (la sorcière Odile). Après avoir résisté aux avances de Thomas, Nina obtient le rôle de « reine des cygnes », au détriment de Veronica (Ksenia Solo), initialement choisie ; Thomas apprécie le « mordant » dont elle a fait preuve pour le repousser.
Les répétitions de danse se succèdent mais Nina n'arrive pas à danser le cygne noir : elle n'est faite que pour le cygne blanc. La pression qu'elle subit est énorme : sa mère, Erica (Barbara Hershey), la bride et la surprotège. Elle se rend d'ailleurs de plus en plus compte que cette dernière, qui a abandonné sa carrière de danseuse pour sa fille, cherche à revivre cette carrière à travers elle. Face à tout cela, Nina, de nature fragile comme le cygne blanc, commence à avoir des visions et des angoisses paranoïaques.
Thomas est convaincu que pour interpréter le cygne noir, elle doit libérer sa sensualité : pour ce faire, il l'embrasse et lui fait subir des attouchements ; il la provoque également en lui parlant de sexe, mais le résultat est laborieux.
Lors d'une soirée de gala afin de présenter la nouvelle reine des cygnes, Thomas présente publiquement Nina en mentionnant également que Beth MacIntyre (Winona Ryder), danseuse étoile approchant de la quarantaine, ne dansera plus la saison suivante. Beth, furieuse et soûle, s'énerve contre Nina qu'elle accuse d'avoir volé sa place. Thomas parvient finalement à la calmer. Le lendemain, Nina apprend que Beth, après la soirée de la veille, s'est fait renverser par une voiture ; Thomas pense qu'elle l'a fait exprès. Nina rend visite à Beth à l'hôpital et s'enfuit terrifiée en voyant que celle-ci a les deux jambes cassées.
Au studio de danse, Nina ne parvient toujours pas à égaler la sensualité du cygne noir et commence à ressentir une attirance pour Lily (Mila Kunis), une jeune danseuse de San Francisco moins douée mais plus sensuelle qui réussit à faire ce dont elle-même est incapable. Ses hallucinations se précisent : Nina imagine en effet Lily la harceler et interprète le comportement de celle-ci comme forcément malveillant.
Nina, contre l'avis de sa mère, décide de sortir en boîte avec Lily. Cette dernière lui propose de prendre une pilule d'ecstasy dont l'effet n'opèrera que pour deux heures. Nina refuse mais Lily la met dans son verre alors qu'elle était aux toilettes. Bien qu'elle s'en soit aperçue, elle boit quand même. En rentrant chez elle, elle se fâche contre sa mère et s'enferme dans sa chambre où elle a des relations sexuelles avec Lily.
Le lendemain, elle se réveille en retard et, dans les coulisses de l'opéra, apprend avec stupéfaction qu'elle a imaginé la fin de la soirée de la veille, Lily étant repartie avec l'un des hommes qu'elle a rencontré dans la boîte.
Lily est finalement choisie pour être la doublure de Nina. Celle-ci en est bouleversée, tente de forcer Thomas à revenir sur sa décision et rend de nouveau visite à Beth à l'hôpital pour lui dire qu'elle comprend ce que cette dernière ressent ; elle en profite également pour lui rendre ses affaires, que Nina avait emportées. Beth se poignarde devant elle, et à de multiples reprises, avec la lime à ongles que Nina lui a rendue, mais quand Nina fuit, une fois dans l'ascenseur de l'hôpital, celle-ci s'aperçoit qu'elle tient la lime à ongles ensanglantée dans sa main.
Au bord de la rupture, Nina rentre chez elle ; elle agresse physiquement sa mère, avant de commencer à se changer en cygne, puis elle s'évanouit. Le jour de la représentation, Erica, voulant la protéger, veut la garder chez elle. Nina s'y oppose et se bat avec sa mère pour finalement partir au studio.
La représentation est sur le point de commencer quand Nina arrive pour se préparer. Thomas accepte, reconnaissant que la jeune femme a changé. Pendant le premier volet, alors qu'elle interprète le cygne blanc, Nina tombe des bras de l'homme jouant le prince du cygne. Désemparée, elle retourne dans sa loge et y trouve Lily qui lui annonce que, vu ses défaillances, elle va interpréter le cygne noir durant le volet suivant. Les deux femmes se battent et Nina poignarde Lily avec un éclat de miroir brisé dans la lutte. Affolée, elle cache le corps et retourne sur scène pour jouer le cygne noir. Sa folie atteint alors son apogée tandis qu'elle triomphe, puisqu'elle s'imagine qu'il lui pousse un plumage noir.
Alors que Nina va se changer pour l'acte final, Lily frappe à la porte de sa loge pour la complimenter de son interprétation. Nina comprend alors que son combat était encore une hallucination, Lily n'était pas aussi mauvaise qu'elle l'imaginait et qu'elle s'est poignardée elle-même. Mourante, elle prend la décision, après avoir retiré l'éclat de verre de son ventre, de jouer sur scène jusqu'au bout. Au dernier acte, durant lequel le cygne blanc saute d'une falaise et meurt, sa plaie grandit. Nina monte sur la structure représentant la falaise, saute et atterrit sur un matelas. Les membres du ballet viennent la féliciter pendant que les spectateurs applaudissent. C'est alors que Lily remarque la tache de sang sur le costume de Nina. Thomas veut qu'on appelle une ambulance et lui demande « Pourquoi tu as fait ça ? », ce à quoi Nina répond dans un soupir : « Je l'ai senti… parfait… c'était parfait ! » ; la clarté des projecteurs l'enveloppe et seuls résonnent les applaudissements des spectateurs...