diff --git a/transcode.c b/transcode.c
index 47a7d8a71420039f5641f37a159231ed4b87a5a8..fd8da347ab2702a733a8d705dc7052760d32b347 100644
--- a/transcode.c
+++ b/transcode.c
@@ -1,5 +1,7 @@
 #include <stdio.h>
 #include <unistd.h>
+#include <sys/stat.h>
+#include <libgen.h>
 #include <libavutil/opt.h>
 #include <libavcodec/avcodec.h>
 #include <libavformat/avformat.h>
@@ -281,7 +283,8 @@ int main(int argc, char *argv[])
 	else
 		oldsrcpath = "/var/empty/nosource";
 	overwrite_check(outpath, oldsrcpath, jstr(jlookup(argv[4], "srchash"), ""));
-
+	if (access(dirname(outpath), F_OK) && mkdir(dirname(outpath), 02775))
+		job_failed("Could not create target directory \"%s\": %s", dirname(outpath), strerror(errno));
 	demux = 0;
 	opts = 0;
 	parse_dict(&opts, jlookup(input, "options"));