diff --git a/contrib/src/ffmpeg/rules.mak b/contrib/src/ffmpeg/rules.mak
index 007aed9fe6a4ea390c18fca96172268a801f152a..c1e7cd50d0729e9e41860d523ac244ef4685b5c4 100644
--- a/contrib/src/ffmpeg/rules.mak
+++ b/contrib/src/ffmpeg/rules.mak
@@ -184,7 +184,7 @@ $(TARBALLS)/ffmpeg-$(FFMPEG_HASH).tar.xz:
 ffmpeg: ffmpeg-$(FFMPEG_HASH).tar.xz .sum-ffmpeg
 	rm -Rf $@ $@-$(FFMPEG_HASH)
 	mkdir -p $@-$(FFMPEG_HASH)
-	(cd $@-$(FFMPEG_HASH) && tar xv --strip-components=1 -f ../$<)
+	(cd $@-$(FFMPEG_HASH) && tar x $(if ${BATCH_MODE},,-v) --strip-components=1 -f ../$<)
 	$(UPDATE_AUTOCONFIG)
 	$(APPLY) $(SRC)/ffmpeg/0004-avformat-fix-find_stream_info-not-considering-extradata.patch
 	$(MOVE)
diff --git a/contrib/src/libav/rules.mak b/contrib/src/libav/rules.mak
index c0de28ac0caefa105dc35922de7702e4bf8a55ef..4b7c368ea90e6e8a8d3fd882e727b1f2e137ef19 100644
--- a/contrib/src/libav/rules.mak
+++ b/contrib/src/libav/rules.mak
@@ -182,7 +182,7 @@ $(TARBALLS)/libav-$(LIBAV_HASH).tar.xz:
 libav: libav-$(LIBAV_HASH).tar.xz .sum-libav
 	rm -Rf $@ $@-$(LIBAV_HASH)
 	mkdir -p $@-$(LIBAV_HASH)
-	(cd $@-$(LIBAV_HASH) && tar xv --strip-components=1 -f ../$<)
+	(cd $@-$(LIBAV_HASH) && tar x $(if ${BATCH_MODE},,-v) --strip-components=1 -f ../$<)
 	$(UPDATE_AUTOCONFIG)
 ifdef HAVE_MACOSX
 	$(APPLY) $(SRC)/libav/0005-avfoundation-simple-capture.patch
diff --git a/contrib/src/main.mak b/contrib/src/main.mak
index 5e126d0524689fe65425a5bfcc7cb269c2b3fe75..ee43e5fcc5c0c98397753a67a774d4597e9d0104 100644
--- a/contrib/src/main.mak
+++ b/contrib/src/main.mak
@@ -33,6 +33,9 @@ PKGS_ALL := $(patsubst $(SRC)/%/rules.mak,%,$(wildcard $(SRC)/*/rules.mak))
 DATE := $(shell date +%Y%m%d)
 VPATH := $(TARBALLS)
 
+# Set following to non-empty to remove uneeded progression reports (i.e. with automatics builds)
+# BATCH_MODE = 1
+
 # Common download locations
 GNU := http://ftpmirror.gnu.org/
 SF := http://heanet.dl.sourceforge.net/sourceforge
@@ -235,10 +238,10 @@ SVN ?= $(error subversion client (svn) not found!)
 ifeq ($(DISABLE_CONTRIB_DOWNLOADS),TRUE)
 download = $(error Trying to download $(1) but DISABLE_CONTRIB_DOWNLOADS is TRUE, aborting.)
 else ifeq ($(shell curl --version >/dev/null 2>&1 || echo FAIL),)
-download = curl -f -L --retry-delay 10 --retry 2 -- "$(1)" > "$@"
+download = curl $(if ${BATCH_MODE},-sS) -f -L --retry-delay 10 --retry 2 -- "$(1)" > "$@"
 else ifeq ($(shell wget --version >/dev/null 2>&1 || echo FAIL),)
 download = rm -f $@.tmp && \
-	wget --passive -t 2 -w 10 -c -p -O $@.tmp "$(1)" && \
+	wget $(if ${BATCH_MODE},-nv) --passive -t 2 -w 10 -c -p -O $@.tmp "$(1)" && \
 	touch $@.tmp && \
 	mv $@.tmp $@
 else ifeq ($(which fetch >/dev/null 2>&1 || echo FAIL),)
@@ -343,10 +346,10 @@ else
     CHECK_SHA512 = $(call checksum,$(SHA512SUM),SHA512)
 endif
 UNPACK = $(RM) -R $@ \
-	$(foreach f,$(filter %.tar.gz %.tgz,$^), && tar xvzf $(f)) \
-	$(foreach f,$(filter %.tar.bz2,$^), && tar xvjf $(f)) \
-	$(foreach f,$(filter %.tar.xz,$^), && tar xvJf $(f)) \
-	$(foreach f,$(filter %.zip,$^), && unzip $(f))
+	$(foreach f,$(filter %.tar.gz %.tgz,$^), && tar xzf $(f) $(if ${BATCH_MODE},,-v)) \
+	$(foreach f,$(filter %.tar.bz2,$^), && tar xjf $(f) $(if ${BATCH_MODE},,-v)) \
+	$(foreach f,$(filter %.tar.xz,$^), && tar xJf $(f) $(if ${BATCH_MODE},,-v)) \
+	$(foreach f,$(filter %.zip,$^), && unzip $(if ${BATCH_MODE},-q) $(f))
 UNPACK_DIR = $(basename $(basename $(notdir $<)))
 APPLY = (cd $(UNPACK_DIR) && patch -fp1) <
 APPLY_BIN = (cd $(UNPACK_DIR) && patch --binary -flp1) <
diff --git a/contrib/src/speex/rules.mak b/contrib/src/speex/rules.mak
index 6312c79e506ab9814ac7ad6e218e433d0fefc1f0..a6ecd7cb82b251da6440592d21e8226a99738566 100644
--- a/contrib/src/speex/rules.mak
+++ b/contrib/src/speex/rules.mak
@@ -19,7 +19,7 @@ $(TARBALLS)/speex-git.tar.gz:
 speex: speex-$(SPEEX_VERSION).tar.gz .sum-speex
 	rm -Rf $@-git $@
 	mkdir -p $@-git
-	$(ZCAT) "$<" | (cd $@-git && tar xv --strip-components=1)
+	$(ZCAT) "$<" | (cd $@-git && tar x $(if ${BATCH_MODE},,-v) --strip-components=1)
 	$(MOVE)
 
 SPEEX_CONF := --disable-binaries
diff --git a/contrib/src/speexdsp/rules.mak b/contrib/src/speexdsp/rules.mak
index 05f88a4c9afd7cf74db388d9dc1bda29ded330e9..8ad2697bf202676e405f314543c107cb1e3caaaa 100644
--- a/contrib/src/speexdsp/rules.mak
+++ b/contrib/src/speexdsp/rules.mak
@@ -19,7 +19,7 @@ $(TARBALLS)/speexdsp-git.tar.gz:
 speexdsp: speexdsp-$(SPEEXDSP_VERSION).tar.gz .sum-speexdsp
 	rm -Rf $@-git $@
 	mkdir -p $@-git
-	$(ZCAT) "$<" | (cd $@-git && tar xv --strip-components=1)
+	$(ZCAT) "$<" | (cd $@-git && tar x $(if ${BATCH_MODE},,-v) --strip-components=1)
 	$(MOVE)
 
 SPEEXDSP_CONF := --enable-resample-full-sinc-table --disable-examples
diff --git a/contrib/src/vpx/rules.mak b/contrib/src/vpx/rules.mak
index 0b552698ab0e08d9eabef445b5b9a8ea3b7e3188..507c37c2521569224f39994e7f5368ef643b2fd2 100644
--- a/contrib/src/vpx/rules.mak
+++ b/contrib/src/vpx/rules.mak
@@ -19,7 +19,7 @@ $(TARBALLS)/libvpx-$(VPX_HASH).tar.gz:
 libvpx: libvpx-$(VPX_HASH).tar.gz .sum-vpx
 	rm -Rf $@-$(VPX_HASH)
 	mkdir -p $@-$(VPX_HASH)
-	(cd $@-$(VPX_HASH) && tar xv --strip-components=1 -f ../$<)
+	(cd $@-$(VPX_HASH) && tar x $(if ${BATCH_MODE},,-v) --strip-components=1 -f ../$<)
 	$(MOVE)
 
 DEPS_vpx =
diff --git a/contrib/src/x264/rules.mak b/contrib/src/x264/rules.mak
index cf5f4d6b8cc1525fb62801f7bab376327a59ad7c..2e356bf2e32db08e778dac9b85a4a8452873af21 100644
--- a/contrib/src/x264/rules.mak
+++ b/contrib/src/x264/rules.mak
@@ -38,7 +38,7 @@ $(TARBALLS)/x264-$(X264_HASH).tar.xz:
 x264: x264-$(X264_HASH).tar.xz .sum-x264
 	rm -Rf $@-$(X264_HASH)
 	mkdir -p $@-$(X264_HASH)
-	(cd $@-$(X264_HASH) && tar xv --strip-components=1 -f ../$<)
+	(cd $@-$(X264_HASH) && tar x $(if ${BATCH_MODE},,-v) --strip-components=1 -f ../$<)
 	$(APPLY) $(SRC)/x264/remove-align.patch
 	$(UPDATE_AUTOCONFIG)
 	$(MOVE)
diff --git a/extras/tools/tools.mak b/extras/tools/tools.mak
index 9ecd71c8a73c43f29a479d23a27c590939331607..5cfd1ec6387ea8f3207ef5918008617e5c745efb 100644
--- a/extras/tools/tools.mak
+++ b/extras/tools/tools.mak
@@ -25,10 +25,10 @@ AUTOCONF=$(PREFIX)/bin/autoconf
 export AUTOCONF
 
 ifeq ($(shell curl --version >/dev/null 2>&1 || echo FAIL),)
-download = curl -f -L -- "$(1)" > "$@"
+download = curl $(if ${BATCH_MODE},-sS) -f -L --retry-delay 10 --retry 2 -- "$(1)" > "$@"
 else ifeq ($(shell wget --version >/dev/null 2>&1 || echo FAIL),)
 download = rm -f $@.tmp && \
-	wget --passive -c -p -O $@.tmp "$(1)" && \
+	wget $(if ${BATCH_MODE},-nv) --passive -t 2 -w 10 -c -p -O $@.tmp "$(1)" && \
 	touch $@.tmp && \
 	mv $@.tmp $@
 else ifeq ($(which fetch >/dev/null 2>&1 || echo FAIL),)
@@ -41,10 +41,10 @@ download = $(error Neither curl nor wget found!)
 endif
 
 UNPACK = $(RM) -R $@ \
-    $(foreach f,$(filter %.tar.gz %.tgz,$^), && tar xvzf $(f)) \
-    $(foreach f,$(filter %.tar.bz2,$^), && tar xvjf $(f)) \
-    $(foreach f,$(filter %.tar.xz,$^), && tar xvJf $(f)) \
-    $(foreach f,$(filter %.zip,$^), && unzip $(f))
+	$(foreach f,$(filter %.tar.gz %.tgz,$^), && tar xzf $(f) $(if ${BATCH_MODE},,-v)) \
+	$(foreach f,$(filter %.tar.bz2,$^), && tar xjf $(f) $(if ${BATCH_MODE},,-v)) \
+	$(foreach f,$(filter %.tar.xz,$^), && tar xJf $(f) $(if ${BATCH_MODE},,-v)) \
+	$(foreach f,$(filter %.zip,$^), && unzip $(if ${BATCH_MODE},-q) $(f))
 
 UNPACK_DIR = $(basename $(basename $(notdir $<)))
 APPLY = (cd $(UNPACK_DIR) && patch -p1) <