Em vez de fornecer uma taxa de quadros fixa ao FFMPEG / libx264 (-r / -framerate), eu gostaria de especificar uma taxa de quadros variável com um valor MÁXIMO e permitir que a libx264 diminua a taxa de quadros como achar melhor. A idéia aqui é obter uma compactação extra quando houver algo como um quadro estático estendido (o que acontece MUITO nos meus vídeos de origem).
Percebo que um quadro MPEG preditivo ou bidirecional se comprimirá muito bem, mas também é possível que a taxa de quadros de origem seja menor do que a que pretendo transcodificar (possivelmente resultando em um fluxo MAIOR!).
video
ffmpeg
compression
framerate
Mark Gerolimatos
fonte
fonte
Respostas:
Frustrado por você também não ter encontrado uma resposta, eu iria pelo menos responder às perguntas de outras pessoas sobre como habilitar a saída VFR (não V B R) do FFMPEG.
A resposta para isso é a
-vsync
opção de nome estranho . Você pode configurá-lo para algumas opções diferentes, mas a que você deseja é '2' ouvfr
. Na página do manual:No entanto, não tenho reputação suficiente para postar um comentário, apenas para responder à "sub-pergunta" que todo mundo parece estar tendo. Mas eu tinha algumas idéias sobre as quais não estava honestamente muito otimista ... Mas a primeira que tentei realmente funcionou . Então.
Você só precisa combinar a
-vsync 2
opção com a-r $maxfps
opção, é claro que substitui$maxfps
pela taxa de quadros máxima desejada! E FUNCIONA! Ele não duplica os quadros de um arquivo de origem, mas descarta os quadros que fazem com que o arquivo ultrapasse a taxa de quadros máxima!Por padrão, parece que,
-r $maxfps
por si só, faz com que ele duplique / solte quadros para obter uma taxa de quadros constante e,-vsync 2
por si só, faz com que puxe os quadros diretamente, sem realmente afetar os valores de PTS.Eu não estava otimista sobre isso, porque eu já sabia que o
-r $maxfps
coloca em uma taxa de quadros constante. Sinceramente, esperava que um erro ou apenas obedecesse o que viesse primeiro ou por último ou o que quer que seja. O fato de fazer exatamente o que eu queria me deixa bastante satisfeito com os desenvolvedores do FFMPEG.Espero que isso ajude você, ou alguém mais tarde, se você não precisar mais saber disso.
fonte
-copyts
pode ser útil tambémNo meu entendimento, isso pode ser possivelmente de uma maneira desajeitada, mas é indesejável por algumas razões complexas e contra-intuitivas
Embora um fluxo x264 tenha uma taxa de quadros, a taxa de quadros é mais um problema no nível de contêiner do que um codec.
Em uma codificação VFR de passagem, haverá o que é essencialmente um arquivo de texto detalhando qual é a taxa de quadros sobre quais quadros / horas e, na codificação de uma fonte, uma função como tcfile-in ou tcfile-out passa os carimbos de data / hora para a codificação , para mapear os locais das taxas e manter o vídeo subjetivamente consistente a partir da origem.
A idéia de baixa taxa de quadros é lógica, mas não funciona por várias razões. Embora o x264 seja compatível com VFR com alguns recursos, não acho que exista uma função de análise que varie a taxa de quadros em relação ao movimento para diminuir o tamanho do arquivo (de maneira análoga aos muitos controles de taxa de bits).
A fonte também é um problema: as fontes VFR, por padrão, mantêm sua variabilidade de quadro, mas aparentemente codificando um arquivo CFR com taxa de bits variável (uma boa idéia, às vezes, especialmente quando é necessário telecine) produzirá simplesmente a mesma CFR.
Isso significa que você provavelmente teria que reescrever a taxa de bits manualmente (ou seja, registros de data e hora de cenas lentas compactadas no arquivo) ou recorrer a um algoritmo de dizimação de quadros como dup, dedup e exactDedup para avisynth . Se o seu vídeo tiver movimento extremamente baixo, alguns quadros (até a metade?) Serão jogados fora. O problema é que esses algoritmos não são avançados e não fazem boas escolhas com imagens da "vida real" sobre o que contribuirá para a melhor codificação.
Além disso, a remoção de quadros que contêm itens como quadros I e B reduz a quantidade de detalhes disponíveis ao longo do tempo, o que faz com que o movimento pareça "escalonado" e pode interferir nos outros parâmetros básicos do vídeo e causar artefatos como alias.
E, devido à maneira como os quantizadores funcionam, o x264 realmente diminui a taxa de bits desproporcionalmente ainda mais nessas cenas de baixo movimento. A menos que você tenha uma apresentação de slides de imagens idênticas, haverá movimento (se apenas granulação e outros artefatos) e haverá uma perda de qualidade que não seria vista sem mudanças drásticas na taxa de bits.
E, finalmente, o motivo de não haver muitas opções para fazer o que você quer é que o x264 seja realmente bom em gerenciar taxas de bits usando a compressão temporal (registrando alterações em quadros parciais). Ir para a taxa de quadros de 1/2 não reduzirá o tamanho do arquivo pela metade; 10% é provavelmente um ganho realista que se espera de um movimento ou animação baixos.
Portanto, diminuir a taxa de bits das cenas estáticas fará muito pouco para o tamanho do arquivo, mas adicionará uma série de problemas de qualidade e sincronização, sem mencionar a incompatibilidade com o software de edição de vídeo.
Se você quiser experimentar um dizimador, poderá limitar a nova taxa de quadros máxima usando as opções de níveis , cada uma das quais com uma resolução e taxa de quadros máximas. Infelizmente, você provavelmente teria que trabalhar em resoluções muito baixas para obter o tipo de taxa de quadros que deseja, usando perfis. Ele volta a editar as taxas manualmente, inteiramente ou para corrigir as taxas de quadros que você considera muito altas. De qualquer maneira, será necessário fazer malabarismos para manter o som sincronizado com as novas taxas de quadros se forem feitas alterações após o processo de codificação, quando o tcfile for conservado.
O ponto principal é que gastar tempo otimizando as diversas configurações de taxa de bits renderá muito mais no gerenciamento do tamanho do arquivo e melhorará a qualidade do seu vídeo, em vez de causar complicações com pouco ganho. Preservar o FPS original é provavelmente a melhor ideia, a menos que você esteja buscando padrões de transmissão ou mídia. Os players são capazes de reproduzir taxas de bits variáveis (diferentemente dos editores) e, quanto mais quadros em seu vídeo, mais suave a reprodução e talvez menor o tamanho do arquivo, devido a alterações menores no movimento entre os quadros.
Aqui está uma coleção de links para informações sobre padrões e discussões no fórum que devem ajudar com esse aspecto confuso da codificação:
- ferramentas de dizimação avisynth
- comutadores fps e -r
- x264 Geral (arquivo tc, fps)
- padrões de arquivo de código de tempo
- Níveis e perfis
- Resumo curto e claro das configurações de CFR / VFR (seção "framerate")
discussões teóricas doom9, videohelp, etc.
1 2 3 4 5 6 7
fonte