diff --git a/doc/ffmpeg-doc.texi b/doc/ffmpeg-doc.texi
index f79b7497cd73fa17dba817c74b5a8aad9e8defe5..a0ab60d448b1de3535365eba79e06f89cca951c3 100644
--- a/doc/ffmpeg-doc.texi
+++ b/doc/ffmpeg-doc.texi
@@ -505,6 +505,9 @@ stream.
 @item -newvideo
 Add a new video stream to the current output stream.
 
+@item -vlang @var{code}
+Set the ISO 639 language code (3 letters) of the current video stream.
+
 @end table
 
 @section Advanced Video Options
diff --git a/ffmpeg.c b/ffmpeg.c
index 5c5aa4725cf4dae6b57dcd967465dd99439fb42e..401b8bb29d9f5d70655670345598d70c6233c63c 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -134,6 +134,7 @@ static int video_disable = 0;
 static int video_discard = 0;
 static char *video_codec_name = NULL;
 static int video_codec_tag = 0;
+static char *video_language = NULL;
 static int same_quality = 0;
 static int do_deinterlace = 0;
 static int top_field_first = -1;
@@ -3179,6 +3180,10 @@ static void new_video_stream(AVFormatContext *oc)
         }
     }
     nb_ocodecs++;
+    if (video_language) {
+        av_metadata_set(&st->metadata, "language", video_language);
+        av_freep(&video_language);
+    }
 
     /* reset some key parameters */
     video_disable = 0;
@@ -3913,6 +3918,7 @@ static const OptionDef options[] = {
     { "dc", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)&intra_dc_precision}, "intra_dc_precision", "precision" },
     { "vtag", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_video_tag}, "force video tag/fourcc", "fourcc/tag" },
     { "newvideo", OPT_VIDEO, {(void*)opt_new_video_stream}, "add a new video stream to the current output stream" },
+    { "vlang", HAS_ARG | OPT_STRING | OPT_VIDEO, {(void *)&video_language}, "set the ISO 639 language code (3 letters) of the current video stream" , "code" },
     { "qphist", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, { (void *)&qp_hist }, "show QP histogram" },
     { "force_fps", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&force_fps}, "force the selected framerate, disable the best supported framerate selection" },