Definir o CRF (um modo de qualidade constante ) e uma taxa de bits de vídeo ao mesmo tempo não faz qualquer sentido. Você quer um desses, exclusivamente.
Para alcançar uma taxa de bits fixa, você deve definir minrate
, maxrate
e b:v
para o mesmo valor. Seu script se pareceria com algo assim (mas o ideal é que você altere bufsize
também):
ffmpeg -threads "4" -i "$2" -c:v libx264 \
-bufsize 30000k -maxrate ${FC_PARAM_video_kbit}k \
-minrate ${FC_PARAM_video_kbit}k -b:v ${FC_PARAM_video_kbit}k \
-c:a libfaac -ac 2 -b:a ${FC_PARAM_audio_kbit}k -ar 44100 \
-pix_fmt yuv420p -filter:v scale=${FC_PARAM_width}:${FC_PARAM_height} -y "$3"
Mas, novamente, isso faz sentido? A questão é o que você realmente precisa alcançar. Raramente há um ponto em forçar uma alta taxa de bits quando ela não oferece melhor qualidade visual (e apenas tamanhos maiores de arquivos). Querer 30 MBit / s para vídeo x264 - mesmo que seja conteúdo HD 1080p - parece um pouco exagerado para mim. *
O x264 é ótimo para oferecer uma qualidade realmente boa se você definir um CRF baixo o suficiente. Qualquer coisa abaixo de 17 ou 18 deve ser imperceptível em termos de distorção visual, e um CRF de 0 significa codificação sem perdas. Em vez disso, defina o CRF para um valor que pareça bom o suficiente para você e não se preocupe com a taxa de bits. É realmente um tipo de opção de definir e esquecer que você pode aplicar a lotes de vídeo para obter uma saída de qualidade semelhante.
Por fim, não se esqueça que se, digamos, um segundo de vídeo puder ser compactado sem perdas (ou seja, com CRF 0) em apenas 10 MBits, a configuração da taxa de bits para 30 MBit / s não forçará essa parte do vídeo para realmente consumir 30 MBit. O x264 não "cria" informações apenas para aumentar a saída para uma taxa de bits solicitada. Ficará em 10 MBit.
* Se você quiser arquivar ou distribuir o vídeo para processamento posterior, escolha um codec intermediário como ProRes ou DNxHD.