This was the result of a fair bit of Googling and reworking - the original posts were Netweblogic, MikeBris, and Olate.

It's based on the MagpieRSS parser, which takes an RSS feed and formats it. However, I had some problems in getting the code in the NetWebLogic post to work, plus since it was written, I think some of the YouTube code has changed, and the world has moved on to want validating code that doesn't use <embed>.

I finally assembled three pages - one which displays all of a YouTube RSS feed, one which displays a specified number of RSS feeds - these were both master lists, and then a detail page from either which shows the actual movie.

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
// get the feed using magpieRSS
    require_once('rss_fetch.inc');
	$rss = fetch_rss("http://gdata.youtube.com/feeds/api/users/[CHANNELNAME]/uploads?alt=rss");
 
?>
<?php	
if(count($rss->items)>0){
	foreach ($rss->items as $video){ //Get all of the feed
		//Get the video ID
			preg_match("/http:\/\/gdata.youtube.com\/feeds\/api\/videos\/(([a-zA-Z0-9]|-|_)*)/", $video['guid'], $videoIdMatches);
			$videoID = $videoIdMatches[1];
		?>
<div class="video">
  <h3>
    <?php echo ucfirst($video["title"]) ?>
  </h3>
  <a href="youtube_embeddedvideo.php?url=<?= $videoID ?>"><img src="http://img.youtube.com/vi/<?php echo $videoID ?>/0.jpg" alt="<?php echo $video["title"] ?>" width="100" class="left_image" /></a>
  <p><strong>Date :</strong>
    <?php echo date("d M Y", strtotime($video['pubdate']) ) ?>
  </p>
  <p>
    <?php echo $video->description ?>
  </p>
  <div style="clear:both"> <a href="youtube_embeddedvideo.php?url=<?php echo $videoID ?>">Watch it here</a><br />
    <a href="http://uk.youtube.com/watch?v=<?php echo $videoID ?>">Watch it on YouTube</a><br />
  </div>
  <br />
</div>
<?php
	}
}else{
	echo "<h3>No Videos Found</h3>";
}
?>
</body>
</html>
Just for people like me who need a bit of hand-holding.

Line 10 has the include to the rss_fetch.inc file that MagpieRSS uses - if the includes are in a separate folder (mine usually are), then this will need to change to reflect the path.

Line 11 will need changing so that [CHANNELNAME] is the name of the YouTube channel that you're taking the feed from.

Lines 32 and 33 - the link to the detail page is here, which will need to change depending on the final name of the page, and the link to the YouTube video from the UK starts 'uk.youtube.com' - I'm assuming that this is country-specific, so would probably need changing depending on your location.

Within the <div class="video">, you might want to rearrange things so that you can apply your own local CSS.

The next page displays a set number of items within a feed, rather than all of them:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
// get the feed using magpieRSS
	require_once('rss_fetch.inc');
	$rss = fetch_rss("http://gdata.youtube.com/feeds/api/users/musictheatrewales/uploads?alt=rss");
	$num_items = 1; //Only display the most recent item
	$items = array_slice($rss->items, -1, $num_items);
	 
?>
<?php	
if(count($rss->items)>0){
	foreach ($items as $video){
		//Get the video ID
			preg_match("/http:\/\/gdata.youtube.com\/feeds\/api\/videos\/(([a-zA-Z0-9]|-|_)*)/", $video['guid'], $videoIdMatches);
			$videoID = $videoIdMatches[1];
		?>
<div class="video">
  <h3>
    <?php echo ucfirst($video["title"]) ?>
  </h3>
  <a href="youtube_embeddedvideo.php?url=<?= $videoID ?>"><img src="http://img.youtube.com/vi/<?php echo $videoID ?>/0.jpg" alt="<?php echo $video["title"] ?>" width="100" class="left_image" /></a>
  <p><strong>Date :</strong>
    <?php echo date("d M Y", strtotime($video['pubdate']) ) ?>
  </p>
  <p>
    <?php echo $video->description ?>
  </p>
  <div style="clear:both"> <a href="youtube_embeddedvideo.php?url=<?php echo $videoID ?>">Watch it here</a><br />
    <a href="http://uk.youtube.com/watch?v=<?php echo $videoID ?>" target="_blank">Watch it on YouTube</a><br />
  </div>
  <br />
</div>
<?php
	}
}else{
	echo "<h3>No Videos Found</h3>";
}
?>
</body>
</html>
Much of the code is similar to the first page. The key differences are in lines 12 and 13 which set the number of items to be displayed with the variable $num_items and then use array_slice to return a specific portion of the variable $rss array, and line 18 which steps through the $items array rather than the $rss array.

Finally, there's the detail page, which takes the querystring from either of the master pages, checks to see the video exists and then displays the result as an object - avoiding the use of <embed> to keep the code valid:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
<?php // Take the link from master page and display video
$id = $_GET['url'];
// get the feed using magpieRSS
	require_once('rss_fetch.inc');
	$rss = fetch_rss("http://gdata.youtube.com/feeds/api/users/[CHANNELNAME]/uploads?alt=rss");
	
	$found = false;
		foreach ($rss->items as $item){
			if(strstr($item['guid'], $id)){
				$found = true;
			break;
			}
		}
 
if($found){
	$video = $item;
	?>
<div class="video">
  <h3> <?php echo ucfirst($video["title"]) ?> </h3>
  <p><strong>Date :</strong> <?php echo date("d M Y", strtotime($video['pubdate']) ) ?> </p>
  <p><a href="http://uk.youtube.com/watch?v=<?php echo $id ?>">View it on YouTube</a><br />
  </p>
  <p><?php echo $video["description"] ?> </p>
  <div class="object">
    <object type="application/x-shockwave-flash" width="425" height="350"  data="http://www.youtube.com/v/<?php echo $id ?>">
      <param name="movie"  value="http://www.youtube.com/v/<?php echo $id ?>">
      </param>
      <param name="wmode" value="transparent">
      </param>
    </object>
  </div>
</div>
</div>
<?php }
else { echo "<h3>No Videos Found</h3>"; 
}
?>
</body>
</html>
Again, the YouTube url on line 28 may need localising.

This was done quite quickly for a project for a client, so there's likely to be a fair bit of tidying up, plus I'm planning to turn this into a set of functions so it's more easily re-usable, but I hope it's useful to someone else.