| Never Too Late (2025) as Frank |
| Agatha Christie: 100 Years of Poirot and Miss Marple (2020) as Self - Narrator (voice) |
| Miranda: My Such Fun Celebration (2020) as Self |
| Murder on the Blackpool Express (2017) as Doc |
| We Love Sitcom (2016) |
| Trouser Bar (2016) as (uncredited) |
| Tales of Television Centre (2012) as Self |
| Rupture: A Matter of Life OR Death (2011) as Narrator (voice) |
| Penelope (2007) as Mr. Vanderman |
| Open Wide (2005) as Peter Hillman |
| The Life and Death of Peter Sellers (2004) as David Niven |
| Best Ever Bond (2002) as Self |
| The Gentleman Thief (2001) as A J Raffles |
| Paradise Lost (1999) as Hofstadter |
| The Heart Surgeon (1997) as Dr. Alex Marsden |
| Bridge of Time (1997) as Halek |
| Element of Doubt (1996) as Richard |
| An Audience with Freddie Starr (1996) |
| Prophecy (1995) as Oliver Halkin |
| The Burning Season (1994) as Steven Kaye |
| Lie Down with Lions (1994) as Peter Husak |
| Sleepers (1991) as Jeremy Coward/Sergei Rublev |
| Jours tranquilles à Clichy (1990) as Alfred Perlès |
| Farewell to the King (1989) as Capt. Fairbourne |
| Empire of the Sun (1987) as Dr. Rawlins |
| The Death of the Heart (1987) as Thomas Quayne |
| The Whistle Blower (1986) as Robert "Bob" Jones |
| Bon Voyage (1985) as Roddy Buchanan |
| Burke & Wills (1985) as William John Wills |
| Combat (1985) as Clement |
| A Passage to India (1984) as Ronny Heaslop |
| Soft Targets (1982) as Harman |
| Chariots of Fire (1981) as Lord Andrew Lindsay |
| Unity (1981) as Philip Colindale |
| Birth of the Beatles (1979) as George Martin |
| Coming Out (1979) as Richie |
| Who Is Killing the Great Chefs of Europe? (1978) as Counterman |
| Full Circle (1978) as Estate Agent |
| The Portland Millions (1976) as Ronald Walker |
| French Without Tears (1976) as Kenneth Lake |
| The Next Voice You See (1975) as Ludovic Bates |
| Susan (1975) as Jim |
| Pope Joan (1972) as Young Monk |
| Edward II (1970) as Soldier/ Attendant |
| About A Bell as Jeremy Delaunay |