The LZ4 algorithm could be an option.
It checks if the beginning of a block is compressible and stores it uncompressed if the ratio is low. This sucessfully prevents compression of already compressed files without the need to specify their names.
The overall compression ratio is lower compared to the algorithms you mention. But LZ4 is very fast, on the other hand. You can easily reach several hundred MiB/s compression and GiB/s decompression speed.
Examples:
# Compression (creates <inputfile>.lz4) lz4c <inputfile> # Decompression lz4c -d <inputfile> # Use with tar tar cf - <directory> | lz4c > <directory>.tar.lz4 # Use with GNU tar tar cf <directory>.tar.lz4 -I lz4c <directory>