Você não pode realmente estimar o tamanho de um arquivo de vídeo antes da codificação. Isso não é possível devido à maneira como o codec funciona. Ele aloca uma certa quantidade de bits para cada quadro, mas esse valor geralmente depende do conteúdo do próprio quadro.
No entanto, existem algumas soluções.
1. O barato:
Deixe-o codificar, verifique o tamanho do arquivo e remova o arquivo novamente
2. A "solução alternativa":
Calcule o tamanho do arquivo usando uma calculadora simples. Isso só funciona ao usar taxa de bits constante. Especifique-o com, por exemplo, -b 500k
para 500 kBit / s. Você precisa ter certeza de que especificou uma taxa de bits que o codec pode usar. por exemplo, não há como compactar um vídeo de 1080p com 200k
de taxa de bits em mpeg4
, porque precisaria de muito mais do que isso.
3. A solução "real":
A última opção que eu tinha em mente era canalizar a saída para /dev/null
e medir o tamanho do arquivo canalizado. Isso, no entanto, não funcionará para todos os formatos, porque o FFmpeg precisa de um arquivo procurado para produzir uma saída válida.
Ainda assim, para AVI, funciona muito bem. O comando a seguir será canalizado para /dev/null
, não deixando nenhum rastro do próprio arquivo e, por fim, emitindo o tamanho do arquivo codificado.
ffmpeg -i input.avi -vcodec mpeg4 -b 3M -f avi pipe:1 | pv > /dev/null
... por exemplo, assim:
5.42MB 0:00:10 [ 521kB/s]
O que isso faz?
- Você precisa especificar o formato usando
-f avi
. Caso contrário, o FFmpeg não saberá qual formato usar. -
pipe:1
diz ao FFmpeg para gravar a saída em um pipe . - Vamos inserir essa saída no visualizador de canais , em curto
pv
. - O visualizador de tubulação medirá o tamanho transferido e enviará seu vídeo para
/dev/null
.
A única desvantagem é que a saída parece um pouco estranha até o vídeo terminar. Ainda não encontrei uma maneira de desabilitar totalmente a saída do FFmpeg e obter pv
para trabalhar com isso.