Is there any way to produce List of frames with beamer?

Here's a simple approach using the \@starttoc command through the newly defined \listofframes command; the new list will have extension .lbf. \addtobeamertemplate was used so that the frametitle command writes the desired information (frame number and title) to the .lbf file. The list is created issuing \listofframes:

\documentclass{beamer}

\makeatletter
\newcommand\listofframes{\@starttoc{lbf}}
\makeatother

\addtobeamertemplate{frametitle}{}{%
  \addcontentsline{lbf}{section}{\protect\makebox[2em][l]{%
    \protect\usebeamercolor[fg]{structure}\insertframenumber\hfill}%
  \insertframetitle\par}%
}

\begin{document}

\begin{frame}
\frametitle{List of Frames}
\listofframes
\end{frame}

\begin{frame}
\frametitle{Test Frame One}
test
\end{frame}

\begin{frame}
\frametitle{Test Frame Two}
test
\end{frame}

\end{document}

Here's the resulting List of Frames:

enter image description here

To facilitate control over which frames to include in the new list, you can use a boolean switch; in the following example I used \ifframeinlbf initially set to true; if you want to suppress some titled frame(s) from the list of frames, use \frameinlbffalse right before those frame(s) and then use \frameinlbftrue right after the frame(s) to activate inclusion in the list:

\documentclass{beamer}

\newif\ifframeinlbf
\frameinlbftrue
\makeatletter
\newcommand\listofframes{\@starttoc{lbf}}
\makeatother

\addtobeamertemplate{frametitle}{}{%
  \ifframeinlbf
  \addcontentsline{lbf}{section}{\protect\makebox[2em][l]{%
    \protect\usebeamercolor[fg]{structure}\insertframenumber\hfill}%
  \insertframetitle\par}%
  \else\fi
}

\begin{document}

\frameinlbffalse
\begin{frame}
\frametitle{List of Frames}
\listofframes
\end{frame}

\frameinlbftrue
\begin{frame}
\frametitle{Test Frame One}
test
\end{frame}

\begin{frame}
\frametitle{Test Frame Two}
test
\end{frame}

\end{document}

In addition to Gonzalo Medina's answer, if you want frame titles to link to page numbers, use this code just before the \insertframetitle:

\protect\hyperlink{page.\insertframenumber}

So the full code is:

\addtobeamertemplate{frametitle}{}{%
  \ifframeinlbf
  \addcontentsline{lbf}{section}{\protect\makebox[2em][l]{%
    \protect\usebeamercolor[fg]{structure}\insertframenumber\hfill}%
  \protect\hyperlink{page.\insertframenumber}\insertframetitle\par}%
  \else\fi
}

The above requires the hyperref package, so make sure you include it.


The answer of Sandro shows a very useful addition to Gonzalo Medinas answer in case one actually wants to use the list of frames as a link collection to easy access a certain frame.

However, the solution of Sandro fails if one resets the frame counter during the presentation. This is a more robust approach which also consideres overlays to avoid multiple links of the same frame:

\addtobeamertemplate{frametitle}{}{%
    \only<1>{%
      \hypertarget{\insertframetitle}{}%
      \addcontentsline{lbf}{section}{\protect\makebox[2em][l]{%
      \protect\usebeamercolor[fg]{structure}\insertframenumber\hfill}%
      \protect\hyperlink{\insertframetitle}{\insertframetitle}\par}% 
    }%
}