瓦迪斯瓦夫·斯皮爾曼是一个知名的犹太裔波兰籍鋼琴家,任職於华沙广播。因1939年納粹德國入侵波蘭,史匹曼和家人被強制遷移至猶太人特區,過著艱辛的日子。一名朋友好心拉攏史匹曼加入納粹的猶太人警察隊以求更好生活,但史匹曼拒絕成為幫兇。1942年,眾猶太人在準備上火車前往「最終安置」所在處時,那名朋友將史匹曼帶走,使史匹曼免於死在集中營的命運,但也從此和家人永远分離。为了生存,他在纳粹德国的建筑工地当劳工,后逃离工地隐居,接受一些好心波兰人私下的救助。
史匹曼多次躲藏,有一次被藏身處隔壁的波兰婦女識破他是猶太人,所幸能及時逃離。在这段躲藏的时间里,目睹了众多纳粹德國暴行,包括大规模的屠杀和焚烧屍體等。1943年的一次,他亲眼目击了还留在隔都的犹太人开始反抗,但最后被德军鎮壓,并进行大屠杀。
一年过後,华沙的生活环境更加恶化。波兰人进行了一次未成功的华沙起义,以致於华沙的人口急剧减少,使史匹曼一次又一次地面临死亡。后来,史匹曼所居住的公寓遭到德軍坦克袭击,他不得不逃离。史匹曼四处寻找食物和水源,最后在幾乎已成廢墟的德軍大本營裡找到了一罐醃製的黄瓜。他使用鐵撬等工具试图打开罐子,而巨大的声音惊动了德国军官威爾姆·歐森菲德,他认出史匹曼是犹太人。在被问及职业时,史匹曼说自己是一个鋼琴家,于是被要求演奏一曲。史匹曼演奏了肖邦的第一号叙事曲,琴技使得歐森菲德无比惊讶。歐森菲德最后决定帮助史匹曼躲藏,并定时给他提供生活必需品。
過了數週,苏联红军在一場反攻攻勢中解放华沙。当史匹曼在逃出躲藏的阁楼时,因穿著歐森菲德所贈與的德國軍官大衣,而被紅军士兵误認是德國军人,欲殺死他,但史匹曼最后被确认是波兰人。
附近一个集中营被解放,但是歐森菲德上尉和一些德國军人被捉獲而成為战俘。歐森菲德遇到一名犹太音乐人,乞求他联系史匹曼来帮助他,但这位犹太音乐人却没有听清楚歐森菲德的名字就被俄军士兵打断。史匹曼回到了华沙广播电台,当他听到了歐森菲德的消息后,试图回去寻找他卻未果。电影以史匹曼在大型音乐会演奏肖邦的大波兰舞曲而结束,字幕显示史匹曼於2000年在华沙去世,歐森菲德上尉則在1952年死于蘇聯的史達林格勒勞改營。
·阿德里安·布罗迪-瓦迪斯瓦夫·斯皮爾曼
·托马斯·克莱舒曼 -威爾姆·歐森菲德
·法蘭克·芬利 -Samuel Szpilman,斯皮爾曼的父亲
·穆琳·李普曼 -Edwarda Szpilman,斯皮爾曼的母亲
·艾蜜莉雅·福克斯-Dorota,斯皮爾曼的朋友
·埃德·斯托帕德 -Henryk Szpilman,斯皮爾曼的弟弟
·茱莉亞·雷娜 -Regina Szpilman,斯皮爾曼的姐姐
·杰西卡·凯特·迈耶 -Halina Szpilman,斯皮爾曼的姐姐