1. Faça uma saída RGB sem perdas primeiro
ffmpeg -y -framerate 25 -video_size 1280x1024 -f x11grab -i :0.0 -c:v libx264rgb \
-crf 0 -preset ultrafast temp.mp4
-
A entrada é RGB, portanto, usar o codificador libx264rgb evitará a conversão RGB para YUV potencialmente lenta que ocorreria se você usasse libx264 simples.
-
Isso usa a predefinição de codificação x264 mais rápida: ultra-rápida.
-
A saída será sem perdas porque
-crf 0
é usado.
2. Então recodifique-o
A saída do primeiro comando será enorme, e os jogadores mais burros não poderão manipular o RGB H.264 para que você possa recodificá-lo:
ffmpeg -i temp.mp4 -c:v libx264 -crf 23 -preset medium -vf format=yuv420p out.mp4
-
Você pode experimentar o valor
-crf
para controlar a qualidade da saída. Uma faixa subjetivamente sã é 18-28, onde 18 é visualmente sem perdas ou quase. O padrão é 23. -
Use a predefinição mais lenta para a qual você tem paciência:
ultrafast
,superfast
,veryfast
,faster
,fast
,medium
,slow
,slower
,veryslow
. O padrão émedium
. -
Eu adicionei
-vf format=yuv420p
para garantir que a saída funcione com players idiotas como o QuickTime e o Windows Media Player. Você pode omitir isso se estiver enviando-o para o YouTube ou apenas reproduzindo-o no VLC, mpv, MPlayer ou qualquer outro player baseado no FFmpeg.