diff --git a/transcode.c b/transcode.c
index 175f913ce2409e0159645891a05e435da30163bc..090adcbaa918cd8a05e85f3ea59bfc8a28297e62 100644
--- a/transcode.c
+++ b/transcode.c
@@ -1,5 +1,6 @@
 #include <stdio.h>
 #include <unistd.h>
+#include <time.h>
 #include <libavutil/opt.h>
 #include <libavcodec/avcodec.h>
 #include <libavformat/avformat.h>
@@ -244,6 +245,22 @@ void connect_pads(AVFilterInOut **ins, AVFilterInOut **outs)
 	}
 }
 
+int checktime(time_t min)
+{
+	static struct timespec prev = {};
+	time_t delta;
+	struct timespec t;
+	clock_gettime(CLOCK_MONOTONIC, &t);
+	if (t.tv_sec < prev.tv_sec)
+		delta = min;
+	else
+		delta = t.tv_sec - prev.tv_sec;
+	if (delta < min)
+		return 1;
+	memcpy(&prev, &t, sizeof(prev));
+	return 0;
+}
+
 int main(int argc, char *argv[])
 {
 	int err, i, progress, _progress;
@@ -327,7 +344,7 @@ int main(int argc, char *argv[])
 	{
 		i = pkt.stream_index;
 		_progress = av_rescale_q(pkt.pts, demux->streams[i]->time_base, AV_TIME_BASE_Q)*100/demux->duration;
-		if (_progress > progress)
+		if (_progress > progress || !checktime(30))
 		{
 			ping_job(jobid, "running", "{\"progress\": %i, \"log\": \"%s\"}", _progress,
 					jescape(get_avlogbuf()));