diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index db5926ace31def188e05c47176ba29cc2fe0ebc2..dc89e67dc1994b078e645e00ecd9a9bdb00633b4 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -1960,9 +1960,11 @@ static int opt_preset(void *optctx, const char *opt, const char *arg)
     OptionsContext *o = optctx;
     FILE *f=NULL;
     char filename[1000], line[1000], tmp_line[1000];
-    const char *codec_name = *opt == 'v' ? video_codec_name :
-                             *opt == 'a' ? audio_codec_name :
-                                           subtitle_codec_name;
+    const char *codec_name = NULL;
+
+    tmp_line[0] = *opt;
+    tmp_line[1] = 0;
+    MATCH_PER_TYPE_OPT(codec_names, str, codec_name, NULL, tmp_line);
 
     if (!(f = get_preset_file(filename, sizeof(filename), arg, *opt == 'f', codec_name))) {
         if(!strncmp(arg, "libx264-lossless", strlen("libx264-lossless"))){