
Supondo que o arquivo de origem não tenha sido alterado e a mesma versão do FFmpeg esteja sendo usada, o arquivo de saída será sempre o mesmo?
Digamos que eu tenha um arquivo de origem com extensão AVI. Se eu convertê-lo para MP4 usando as configurações padrão do FFmpeg, cada execução do FFmpeg produzirá arquivos idênticos?
Responder1
A resposta qualificada é sim. As diferenças usuais são devidas às strings de versão incorporadas por codificadores e muxers. Adicionar -bitexact
irá suprimi-los.
No entanto, alguns codificadores como x265 não são determinísticos na codificação multithread.
Existem alguns outros casos de nicho, como algumas rotinas DSP em arquiteturas PPC e Altivec, e algumas rotinas de conversão de formato de pixel. -bitexact
tem efeito aqui também, em que as rotinas são selecionadas.
O FFmpeg possui um conjunto automatizado de testes de regressão, cujos resultados públicos podem ser visualizados emdestino.ffmpeg.org.
Quase todos os testes são verificados em relação a hashes de execuções de referência. O que basicamente requer exatidão de bits.
Responder2
Depende dos codecs e opções usadas.
- comando
ffmpeg -i big_buck_bunny_480p_stereo.avi out.mp4
produz os mesmos arquivos binários. Mas se você adicionar opções de taxa de bits
ffmpeg -i big_buck_bunny_480p_stereo.avi -maxrate 500k -bufsize 500k out.mp4
você pode obter resultados diferentes mesmo com -bitexact
.
Portanto, codificação com x264 (que é o padrão .mp4
se libx264 estiver disponível), vários threads (por padrão, o número de threads éselecionado automaticamente) e as opções de taxa de bits podem produzir binários diferentes.
- Você pode precisar ter certeza de que ocodecversões (não apenas a versão ffmpeg) são iguais às do ffmpeg com a mesma versão podem ser configuradas para usar versões diferentes do libx264, o que pode resultar em binários diferentes nas codificações do mesmo arquivo. Infelizmentenão há maneira fácilpara verificar as versões do codec.