diff --git a/libavutil/opt.c b/libavutil/opt.c
index 08f6f1517f..693e846cdd 100644
--- a/libavutil/opt.c
+++ b/libavutil/opt.c
@@ -239,7 +239,7 @@ static int set_string_number(void *obj, void *target_obj, const AVOption *o, con
             const_names [ci] = NULL;
             const_values[ci] = 0;
 
-            res = av_expr_parse_and_eval(&d, (o->type == AV_OPT_TYPE_FLAGS) ? buf : val, const_names,
+            res = av_expr_parse_and_eval(&d, i ? buf : val, const_names,
                                          const_values, NULL, NULL, NULL, NULL, NULL, 0, obj);
             if (res < 0) {
                 av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\"\n", val);
@@ -255,7 +255,7 @@ static int set_string_number(void *obj, void *target_obj, const AVOption *o, con
         if ((ret = write_number(obj, o, dst, d, 1, 1)) < 0)
             return ret;
         val += i;
-        if (o->type != AV_OPT_TYPE_FLAGS || !*val)
+        if (!i || !*val)
             return 0;
     }