Taxa mínima de quadros de trabalho para o codec H264

7

Ao criar um vídeo a partir de arquivos de imagem únicos, enquanto cada arquivo de imagem deve ficar visível por cerca de um segundo, faz sentido codificar um vídeo com uma taxa de quadros extremamente baixa, como 1 quadro por segundo. Para esse tipo de aplicativo, cada taxa de quadros maior que isso seria um desperdício de recursos.

Gostaria de saber se o codec H264 (ou qualquer implementação específica, como x264) em si tem algum limite inferior para a taxa de quadros abaixo da qual se trata de problemas técnicos ou algum tipo de instabilidade. Caso não haja problemas com a codificação, podemos esperar que os players de vídeo lidem adequadamente com uma taxa de quadros baixa tão incomum?

Obrigado por compartilhar sua experiência!

Jan-Philip Gehrcke
fonte

Respostas:

2

Eu estou com AJ. A menos que você conheça as características de todos os jogadores que possam ver isso, seria imprudente contar com uma pequena amostra dos resultados dos testes. O uso de uma taxa de quadros padrão como 24 qps com um intervalo de quadros-chave de 24 quadros fornecerá basicamente a mesma coisa, sem comprometer a compatibilidade. Os quadros intermediários serão minimamente pequenos porque não haverá alterações detectáveis ​​para codificar.

Jim Mack
fonte
11
Sim, um quadro com bits idênticos leva apenas cerca de 15 bytes. Todos os macroblocos = ignoram e o CABAC compacta muito bem o padrão de bits repetido.
Peter Cordes
2
Só me preocupo com players de hardware que suponham que eles produzam um sinal de TV de 60 ou 50Hz. O h.264 não se importa com o tempo, são apenas quadros, mesmo em um vídeo VFR. Os carimbos de data e hora do quadro são um problema de contêiner. Os formatos de contêiner são muito flexíveis. É facilmente possível exibir um único quadro por 1 minuto, 150fps para vários quadros e outro quadro por um tempo ou qualquer coisa que você desejar. Armazenar vídeo VFR em mkv, mp4 e alguns outros contêineres modernos é um problema resolvido.
Peter Cordes
5

Não tenho certeza de como ele se comportará com taxas de quadros muito baixas, mas vale a pena ressaltar que isso também limitaria suas opções de como e quando você poderia alterar os quadros, pois eles teriam que seguir os ciclos do relógio. O que provavelmente funcionará nesse caso é um longo intervalo de quadro-chave. A maioria dos quadros em uma compactação como H.264 armazena apenas as alterações do quadro anterior. No caso de uma imagem estática, as taxas de compactação serão enormes porque ocorre muito pouca (nenhuma) alteração entre os quadros. Não tenho certeza de que você realmente economizaria o suficiente com a queda da taxa de quadros para valer a perda de controle sobre quando poderá fazer uma alteração no quadro.

A melhor aposta seria tentar com sua mídia e ver os resultados. A compactação é uma coisa altamente dependente do conteúdo e a melhor qualidade e compactação de qualquer clipe específico dependerão muito da natureza desse clipe, portanto, a avaliação ainda é a melhor maneira de testá-la.

AJ Henderson
fonte
Existe uma desvantagem na compactação além do que meu comentário anterior em outra resposta disse: Se houver muita redundância entre as diferentes imagens (ou seja, ainda é um vídeo, não uma apresentação de slides), o preenchimento com imagens idênticas dificultará a localização e a codificação do codificador. explorar isso. Dependendo das configurações de codificação, o codificador manterá apenas um número de quadros antigos como possíveis referências para novos quadros e só poderá pesquisar dentro de um GOP (por exemplo, 250 quadros padrão para x264). Se todos os candidatos são a mesma imagem, que não dar-lhe várias opções para encontrar uma melhor referência para cada bloco ...
Peter Cordes
... por exemplo, depois que um objeto em primeiro plano se move diante de alguns detalhes do plano de fundo, o codificador pode salvar bits referenciando a aparência em um quadro mais antigo antes de ser obscurecido. O h.264 pode escolher quadros de referência por bloco. Este é um efeito relativamente pequeno; bons codificadores H.264 fazer ok com apenas 1 moldura de referência, mas ainda é um pouco prejudicial para a eficiência de compressão
Peter Cordes
Claro, você ainda precisa de configurações de codificação adequadas, mas pode aumentar o tamanho do GOP em vez de reduzir a taxa de quadros se tudo estiver estático. Se não estiverem, reduzir a taxa de quadros não é uma ótima opção para começar. Gostaria de saber se houve algum trabalho em um formato GOP variável.
AJ Henderson
Acho que imagens repetidas ainda reduzirão a oportunidade de pirâmide B útil e várias opções de quadros P de referência. Mas eu acho que um codificador pode manter um quadro P antigo de qualquer lugar dentro do GOP, então perder os quadros B de referência provavelmente é tudo na teoria, mas o IDK está na prática.
Peter Cordes
11
Bons codificadores MPEG-2 podem tomar decisões de quadro-chave com base em cenários e decisões de quadro P vs B com base no conteúdo. : O mpeg2videocodificador do ffmpeg lista uma -sc_thresholdopção e uma -b_strategyopção para controlar a estratégia de seleção I / P / B. De qualquer forma, o h.265 é legal, com blocos DCT de até 32x32 e unidades de previsão de 64x64 muito grandes que podem ser divididas em blocos menores, se necessário. sonnati.wordpress.com/2014/06/20/h265-part-i-technical-overview . vs. macroblocos h.264 16x16 com apenas blocos DCT 4x4 ou 8x8 (somente alto perfil). Também forum.doom9.org/showthread.php?t=167081
Peter Cordes
2

Eu brinquei com a transformação de várias fotos em uma apresentação de slides h.264, principalmente para comparar a eficiência de compactação de JPG versus h.264. Eu recebi algumas respostas úteis sobre as implicações técnicas disso dos x264 devs no doom9. por exemplo, force x264 a não usar quadros B para isso, porque imagens não muito relacionadas precisarão de muitos macroblocos I e codificá-los em quadros B é mais caro.

O comportamento do player de software com vídeo de baixa taxa de quadros não era ideal no passado. Eu acho que um jogador mais velho só verificou a entrada do teclado quando exibiu um quadro. Portanto, houve um atraso entre a entrada do usuário e a resposta do jogador. mplayer2 e mpv não têm esse problema. Além disso, jogadores que só podem buscar quadros-chave buscarão pedaços muito grandes (mais ou menos 2 minutos!) Se você não reduzir o intervalo do quadro-chave. O x264 não inserirá IDR (limites de GOP) em todo o lugar se as imagens estiverem um pouco relacionadas entre si.

Use x264 -tune stillimage. Ele aciona as otimizações psy , porque a estabilidade temporal não é um problema para este caso de uso. Resultados de pesquisa adicionais: do google .

Eu concordo com outras sugestões para ter alguns quadros duplicados, para aumentar o FPS para pelo menos 5 ou algo assim, apenas no caso de jogadores ruins. No entanto, os smartphones / tablets não devem ter problemas ao reproduzir vídeo de FPS variável, pois geralmente gravam dessa maneira quando os níveis de luz caem. Como os vídeos de FPS variável dos telefones já estão disponíveis, o suporte ao player de hardware deve ser esperado. Eu não esperava problemas, mas também não ficaria surpreso se houvesse pelo menos alguns players de hardware antigos que não lidassem bem com isso.

Um quadro de todos os macroblocos "ignorar" leva apenas cerca de 20 bytes a 1080p, IIRC. Porém, uma das razões pelas quais eu não gosto de quadros duplicados é que ele interfere no passo único de percorrer as imagens manualmente.


Porém, há uma desvantagem da compactação na duplicação de quadros : se houver muita redundância entre as diferentes imagens (ou seja, ainda é um vídeo, não uma apresentação de slides), o preenchimento com imagens idênticas tornará mais difícil para o codificador encontrar e explorar isso.

Dependendo das configurações de codificação, o codificador manterá apenas um número de quadros antigos como possíveis referências para novos quadros e só poderá pesquisar dentro de um GOP (por exemplo, 250 quadros padrão para x264). Se todos os candidatos tiverem a mesma imagem, isso não oferece várias opções para encontrar uma referência melhor para cada bloco.

Por exemplo, depois que um objeto em primeiro plano se move diante de alguns detalhes do plano de fundo, o codificador pode salvar bits referenciando a aparência em um quadro mais antigo antes de ser obscurecido. O h.264 pode escolher quadros de referência por bloco. Este é um efeito relativamente pequeno; bons codificadores h.264 funcionam bem com apenas 1 quadro de referência, mas ainda são prejudiciais à eficiência da compactação e um desperdício de energia / duração da bateria / tempo de CPU no lado da descompressão para copiar a memória e decodificar e exibir quadros extras.


A recuperação de VFR após um NLE força todos os seus clipes a uma alta taxa de quadros:

O FFmpeg possui um mpdecimatefiltro que descarta quadros semelhantes. Você pode definir limites de quantos quadros em uma linha ele pode cair. Com um limite de similaridade apertado, você deve fazer com que ele elimine apenas duplicatas reais.

por exemplo, ffmpeg -i input.mp4 -vf mpdecimate=max=9:hi=400 -c:a copy -c:v libx264 -preset veryslow -tune film output_vfr.mkvcai até 9 quadros seguidos e somente se o bloco mais diferente fosse diferente de "400" e (padrões): não mais de 33% dos blocos eram diferentes por "320" unidades. IIRC, é basicamente um SAD de 8x8 em componentes de pixel.

(O FFmpeg assume como padrão CFR para .mp4saídas, portanto, use -vsync 2para .mp4saída com taxa de quadros variável . Eu acho que é seguro: Problemas com a taxa de quadros na conversão de vídeo usando ffmpeg com libx264 )

Peter Cordes
fonte
1

A maioria dos NLEs permite importar uma imagem estática na forma de quanto tempo você deseja que ela apareça na linha do tempo, assumindo que você definiu as propriedades do projeto com uma taxa de quadros padrão, como 30 fps ou 24 fps etc.

No Vegas Pro, posso definir o tempo em que uma imagem estática deve aparecer na linha do tempo, de uma fração de segundo a vários segundos. Se eu definir isso para 1 segundo, quando arrastar e soltar uma imagem estática na linha do tempo, Vegas gerará quadros suficientes para atender à minha solicitação. Normalmente edito com vídeos de 30 qps e quando adiciono uma imagem estática, misturo uma linha do tempo com um vídeo de 30 qps que já existe (AVCHD 1080p).

Para lhe dar uma resposta específica, eu precisaria saber qual NLE você está usando.

filzilla
fonte
Eu apenas aplico um software de codificação bruto como ffmpegou avconv, portanto, não há necessidade de falar sobre nenhum NLE. Eu acho que a pergunta é praticamente respondida com "Basta seguir uma taxa de quadros padrão com a qual todos os jogadores possam lidar adequadamente. Não há 'desperdício de recursos' real, porque o esquema de codificação é bom o suficiente para lidar com imagens estáticas".
Jan-Philip Gehrcke