疫情期間,一位德國公民以個人名義向中國尋求疫苗,在我國藥物緊缺的情況下,竟優先選擇提供給他,其中包括三萬支口罩、幾百套藥物和防護服,并派專機運往德國,親自交在他手上。這一切都隻因他的爺爺是約翰拉貝,這個名字你可能沒聽過,但就是這個人曾在一九三七年的南京大屠殺中,冒着生命危險拯救了二十五萬中國人的性命。

一九三七年,約翰拉貝任命為德國西門分子公司在南京地區的總負責人。在毫無征兆的情況下,多架飛機在南京的上空盤旋并瘋狂投放炸彈,整個城市瞬間變成一片火海。拉貝正在開會,突然發生的爆炸讓人們驚慌失措,他和妻子要回工廠避難,卻發現工廠的大門擠滿了逃難的中國人,他指令保安打開門,然而他剛進去,保安就又把門關上了。拉貝看着可憐的中國人,指令保安必須打開門,人們紛紛進來避難,眼看場面越來越危險。機智的拿出德國國旗,撐開四個角,然後用探照燈打亮,讓中國人躲到旗下避難,人們紛紛跑進去。果然轟炸機見到巨大的萬字旗就掠過其面飛走,不再進行轟炸,人們暫時安全了。
但很快,日軍就全全面占領了南京城,城内一片狼籍,百姓民不聊生。拉貝很想救這裡的百姓,突然他們想到可以以德國人的名義建立國際安全區,而安全區是日本人絕對不可以侵犯的,這樣就可以将受難的百姓收納進來。
不巧的是,明天就是拉貝在西門子公司卸任的時間,他打算乘坐碼頭最後一艘郵輪回德國。第二天他和妻子來到碼頭,這裡已經人山人海,人人都想離開南京城。可意想不到的是,讓妻子上船以後,他卻遲遲沒有上去。沒錯,他決定留下,他還不知道正是這樣的一個決定将拯救幾十萬中國人的性命。他還沒離開碼頭,日軍的飛機就對碼頭的群衆進行瘋狂的轟炸,甚至将已經開走的油輪炸毀。看着這一幕,拉貝痛苦至極,因為自己的妻子還在船上,他還是強忍喪妻之痛,和同伴們建起安全區。
眼看着南京城城中百姓流離失所,但安全區隻能容納十萬人,他們最後決定強行收留二十萬。但國際法中有條規定,就是交戰雙方的士兵不得進入安全區,他們破不得已隻能被迫交出這裡的戰俘。本以為這樣能保證戰俘們的安全,但接下來的一幕讓他們徹底震驚了,他們剛交出戰俘,隻聽一陣槍聲傳來,日軍竟用機槍将戰俘全部屠殺。他們根本不把國際公約放在眼裡,喪失了基本的道德和人性。
看着一個個被殘害屠殺的中國人,拉貝決定救助更多的中國人。但二十萬難民每天的食物需求量相當之大,拉貝幾人想盡辦法搞到的糧食卻被日軍攔下,竟跟他們索要巨額的關稅,一袋大米一萬元,這和搶錢有什麼差別?他們根本拿不出這麼多錢,唯一的辦法就是和日本軍官進行談判。談判桌上,日本軍官對他們絲毫不屑,對殺害戰俘的事也輕描淡寫。在拉貝的努力下,終于争取到了免除關稅。
談完以後,拉貝出門卻發現自己的一位中國司機不見了,原來就在剛剛,日本士兵要求這位司機必須呆在車上,而司機就因為聽不懂他的話就被拉去了刑場。當拉貝找到他,卻看到日本軍官正一個個砍下中國人的頭顱,這就是日本軍官臭名昭著的砍頭比賽。這是南京大屠殺中臭名昭著的砍頭比賽,兩名日本軍官不斷砍下中國人的頭顱,在規定時間内砍下較多的一方獲勝。他們還印發在報紙上,當成榮譽進行大肆宣傳,簡直是毫無人性。
拉貝看到這一幕震驚了他的司機就因為聽不懂日本士兵的話,就被拉去砍了頭。他決定讨個說法,但日本軍官卻沒有絲毫的悔意。還好他允許拉貝在戰俘營中挑選一個會說德語的人給他當司機。當拉貝見到這些戰俘,明白他們不可能會說德語,他便提出如果找不到會德語的人,就要帶走二十個戰俘作為補償,他是想救走更多的人。日本軍官答應了。當問到大家有沒有會說德語的人,沒想到一位青年卻舉起了的手。日本軍官讓他出列,要求他講幾句德語,已是真假,但這位青年卻吞吞吐吐,看來他根本不會。貝拉想把他帶走,便引導他,哪怕是胡亂說幾句聽不懂的話,可即便是這樣,他也沒有開口,沒人知道這位青年其實是在救人,因為他意識到如果自己不開口說話,就會有更多的人被救走。在危難時刻,這種心系同胞的精神讓人為之敬佩。于是拉貝開始挑人,這是他最糾結、也是最心痛的時候,因為他不想放棄任何一個中國人。他看到一個年齡比較大的青年問他是不是有孩子,青年點了點頭,于是便選了他。他挑選着一個個青年,就好像把他們從死神手裡拽了出來。但當選完以後,拉貝看到他們後眼鏡擺了一排被砍下來的頭顱,他知道這些沒被選中的人将遭受同樣的命運。他躺在床上痛苦,恨自己無能為力。