Eu acho que você precisa fornecer mais detalhes sobre os limites - por exemplo, a saída em convert.txt precisa estar na mesma ordem que 'before.txt', quanto tempo cada análise do script python demora? Se a ordem de saída não for contingente na entrada, você poderá fazer isso colocando em segundo plano os processos e lançando um número deles em cada loop - o número dependendo, eu acho, de quantos threads sua CPU irá tratar.
Algo como o seguinte pode (ou não) ser adequado ao seu objetivo:
#! /bin/bash
threads=4;
threads=$(( $threads - 1))
while read filein
do
python py-hex.py $filein | sed -n -e '/^qter/p' | sed 's/qter: //g' >> converted.txt &
for thread in 'seq $threads'
do
read filein
python py-hex.py $filein | sed -n -e '/^qter/p' | sed 's/qter: //g' >> converted.txt &
done
done < $filename
Notas: Isso pressupõe que seu arquivo python pode manipular entradas vazias (ou seja, se o número de comandos não exatamente divisíveis pelo número de threads existirão algumas linhas vazias - você sempre pode verificar isso antes de executar o loop interno.
Este script presume que você não se importa com a ordem de saída.