Apresentando o SVT-AV1: um framework AV1 de código aberto escalonável

por Andrey Norkin, por Joel Sole, por Kyle Swanson, por Mariana Afonso, por Anush Moorthy, por Anne Aaron

Blog da Tecnologia Netflix em Netflix TechBlog Segue 17 de abril · 7 min ler Sede da Netflix, Winchester Circle.

Sede da Netflix por volta de 2014. É um belo edifício com boa arquitetura! Esta foi a principal casa da Netflix por vários anos durante o crescimento da empresa, mas em algum momento a Netflix havia superado sua casa e precisava de mais espaço. Uma abordagem para resolver esse problema seria estender o edifício, anexando novas salas, corredores e reconstruindo os mais antigos. No entanto, uma abordagem mais escalável seria começar com uma nova base e começar um novo edifício. Abaixo você pode ver a nova sede da Netflix em Los Gatos, Califórnia. As instalações são modernas, espaçosas e escaláveis. O novo campus começou com dois edifícios interligados e foi ampliado com mais edifícios quando era necessário mais espaço. O que esse exemplo tem a ver com desenvolvimento de software e codificação de vídeo? Quando você está construindo um codificador, às vezes você precisa começar com um slate limpo também.

Novos edifícios da Netflix em Los Gatos.

O que é o SVT-AV1?

Intel e Netflix anunciaram sua colaboração em uma implementação de codificador de vídeo de software chamada SVT-AV1 em 8 de abril de 2019. A Scalable Video Technology (SVT) é a estrutura de código aberto da Intel que fornece bibliotecas de codificação de vídeo de software de alto desempenho para desenvolvedores de tecnologias de nuvem visual. Neste blog de tecnologia, descrevemos a relevância dessa parceria para o setor e cobrimos algumas de nossas experiências até agora. Também descrevemos como você pode se tornar parte desse desenvolvimento.

Um breve resumo da história dos padrões de vídeo

Historicamente, os padrões de compressão de vídeo foram desenvolvidos por duas organizações internacionais de padronização, ITU-T e MPEG (ISO). O primeiro padrão de vídeo digital bem sucedido foi o MPEG-2, que realmente permitiu a transmissão digital de vídeo. O sucesso foi repetido pelo H.264 / AVC, atualmente, o mais onipresente padrão de compressão de vídeo suportado por dispositivos modernos, muitas vezes em hardware. Por outro lado, existem exemplos de codecs de vídeo desenvolvidos por empresas, como o VC-1 da Microsoft e os codecs VPx do Google. A vantagem de adotar um padrão de compactação de vídeo é a interoperabilidade. A especificação padrão descreve detalhadamente como um fluxo de bits de vídeo deve ser processado para produzir quadros de vídeo exibíveis. Isso permite que os fabricantes de dispositivos trabalhem independentemente em suas implementações de decodificadores. Quando os provedores de conteúdo codificam seus vídeos de acordo com o padrão, isso garante que todos os dispositivos compatíveis sejam capazes de decodificar e exibir o vídeo.

Recentemente, a adoção do mais novo codec de vídeo padronizado pela ITU-T e pela ISO tem sido lenta devido à ampla incerteza de licenciamento. Um grupo de empresas formou a Aliança para Mídia Aberta (AOM) com o objetivo de criar um codec de vídeo moderno e livre de royalties que seria amplamente adotado e apoiado por uma infinidade de dispositivos. Atualmente, a placa AOM inclui a Amazon, a Apple, a ARM, a Cisco, o Facebook, a Google, a IBM, a Intel, a Mozilla, a Netflix, a Nvidia e a Samsung, e muitas empresas aderiram como membros do promotor. Em 2018, a AOM publicou uma especificação para o codec de vídeo AV1.

A especificação do descodificador está congelada, sendo melhorado o codificador durante anos

Como mencionado anteriormente, um padrão especifica como o fluxo de bits compactado deve ser interpretado para produzir vídeo exibível, o que significa que os codificadores podem variar em suas características, como desempenho computacional e qualidade alcançável para uma determinada taxa de bits. O codificador pode normalmente ser melhorado anos após o padrão ter sido congelado, incluindo variações de velocidade e qualidade. Um exemplo desse desenvolvimento é o codificador x264 que vem melhorando anos após a finalização do padrão H.264.

Para desenvolver um decodificador em conformidade, a especificação padrão deve ser suficiente. No entanto, para orientar os implementadores de codecs, o comitê de padronização também emite um software de referência , que inclui um decodificador e um codificador compatíveis. O software de referência serve como base para o desenvolvimento padrão, uma estrutura na qual o desempenho das ferramentas de codificação de vídeo é avaliado. O software de referência geralmente evolui junto com o desenvolvimento do padrão. Além disso, quando a padronização é concluída, o software de referência pode ajudar a inicializar implementações de decodificadores e codificadores compatíveis.

AOM produziu o software de referência para AV1, que é chamado libaom e está disponível online . A libaom foi construída sobre o codebase do VP9, VP8 e gerações anteriores de codecs de vídeo VPx. Durante o desenvolvimento do AV1, o software foi desenvolvido pelo grupo de codecs de vídeo AOM.

Interesse Netflix em SVT-AV1

O software de referência geralmente se concentra na melhor compressão possível às custas da velocidade de codificação. É bem conhecido que codificar o tempo de software de referência para codecs de vídeo modernos pode ser bastante longo.

Um dos objetivos da Intel com o desenvolvimento do SVT-AV1 foi criar um codificador AV1 de nível de produção que oferecesse desempenho e escalabilidade. O SVT-AV1 usa a paralelização em vários estágios do processo de codificação, o que permite que ele se adapte ao número de núcleos disponíveis, incluindo os servidores mais novos com contagem de núcleos significativa. Isso possibilita que o SVT-AV1 diminua o tempo de codificação, mantendo a eficiência da compressão.

Em agosto de 2018, a equipe de Algoritmos de Vídeo da Netflix e a equipe Visual Cloud da Intel decidiram unir forças no desenvolvimento da SVT-AV1. Desde então, as equipes da Intel e da Netflix colaboraram estreitamente no desenvolvimento da SVT-AV1, discutindo decisões sobre arquitetura, implementando novas ferramentas e melhorando a eficiência da compactação. O principal interesse da Netflix em SVT-AV1 foi um pouco diferente e complementar à intenção da Intel de construir um codificador altamente escalável de nível de produção.

Na Netflix, acreditamos que o ecossistema AV1 se beneficiaria de uma implementação alternativa de código aberto limpo e eficiente. Existe pelo menos um outro codificador AV1 de código aberto alternativo, rav1e . No entanto, rav1e é escrito na linguagem de programação Rust, enquanto um codificador escrito em C tem uma base muito mais ampla de desenvolvedores em potencial. O codificador de código aberto também deve permitir a experimentação fácil e uma plataforma para testar novas ferramentas de codificação. Consequentemente, nossos requisitos para o software AV1 são os seguintes:

  • Código fácil de entender com uma barreira de entrada baixa e uma estrutura de teste
  • Eficiência de compressão competitiva a par da implementação de referência
  • Conjunto de ferramentas completo e uma implementação de decodificador compartilhando código comum com o codificador, o que simplifica os experimentos em novas ferramentas de codificação
  • Diminuição do tempo de execução do codificador que permite um retorno mais rápido ao testar novas ideias

Acreditamos que se o SVT-AV1 estiver alinhado com essas características, ele pode ser usado como uma plataforma para futuros desenvolvimentos de padrões de codificação de vídeo, como os esforços de pesquisa e desenvolvimento para o codec de vídeo AV2 e melhor codificação AV1.

Assim, a Netflix e a Intel abordam o SVT-AV1 com objetivos complementares. A velocidade do codificador ajuda a inovação, pois é mais rápido executar experimentos. A limpeza do código ajuda na adoção da comunidade de código aberto, o que é crucial para o sucesso de um projeto de código aberto. Pode-se argumentar que a paralelização extensiva pode ter compensações de eficiência de compressão, mas também permite testar mais opções de codificação. Além disso, esperamos que plataformas multi-core sejam usadas predominantemente para codificação de vídeo no futuro, o que torna importante testar novas ferramentas em uma arquitetura que suporte muitos threads.

Nosso progresso até agora

Realizamos os seguintes marcos para alcançar os objetivos de tornar a SVT-AV1 uma excelente plataforma de experimentação e referência AV1:

  • SVT-AV1 de fonte aberta no GitHub https://github.com/OpenVisualCloud/SVT-AV1/ com uma licença de patente BSD +.
  • Adicionado uma estrutura de integração contínua (CI) para Linux, Windows e MacOs.
  • Adicionado um framework de testes de unidade baseado no Google Test. Um contratante externo está adicionando testes unitários para obter cobertura suficiente para o código já desenvolvido. Além disso, os testes de unidade cobrirão o novo código.
  • Adicionado outros tipos de testes na estrutura do CI, como a codificação automática e o teste Valgrind.
  • Iniciou um projeto de decodificador que compartilha partes comuns dos algoritmos AV1 com o codificador.
  • Introduziu diretrizes de estilo e formatou o código existente de acordo.

O SVT-AV1 está atualmente em andamento, pois ainda está faltando a implementação de algumas ferramentas de codificação e, portanto, tem um intervalo médio de cerca de 14% na taxa PSDR BD com o codificador libaom em um modo de 1 passagem. Os recursos a seguir estão planejados para serem adicionados e diminuirão a diferença de taxa de BD:

  • Imagens de referência múltipla
  • Imagens de ALTREF
  • Compensação de movimento do oitavo-pel (1/8-pel)
  • Compensação de movimento global
  • OBMC
  • Previsão de cunha
  • TMVP
  • Previsão de paleta
  • Tamanhos de bloco de transformações adaptáveis
  • Otimização do Coeficiente Quantizado por Treliças
  • Segmentação
  • Suporte 4: 2: 2
  • Controle de taxa (ABR, CBR, VBR)
  • Modo de codificação de 2 passagens

Ainda há muito trabalho pela frente e estamos comprometidos em fazer com que o projeto SVT-AV1 satisfaça o objetivo de ser uma excelente plataforma de experimentação, bem como viável para aplicações de produção. Você pode acompanhar o andamento desempenho SVT-AV1 na beta de ACJT (AreWeCompressedYet) website. O AWCY foi o framework utilizado para avaliar as ferramentas AV1 durante o seu desenvolvimento. Na figura abaixo, você pode ver uma comparação de duas versões do codec SVT-AV1, o gráfico azul representando a versão SVT-AV1 de 15 de março de 2019 e o gráfico verde de 19 de março de 2019.

Captura de tela da página de comparação de codecs AreWeCompressedYet.

O SVT-AV1 já se destaca em sua velocidade. O SVT-AV1 não atinge a eficiência de compressão da libaom nas configurações de velocidade mais baixa, mas executa codificação significativamente mais rápida que o modo de libaom mais rápido. Atualmente, o SVT-AV1 no modo mais lento usa cerca de 13,5% mais bits em comparação com o codificador libaom em um modo de 1 passagem com cpu_used = 1 (o segundo modo mais lento de libaom), sendo cerca de 4 vezes mais rápido *. A lacuna de taxa de BD com a codificação libaom de 2 passos é mais ampla e estamos planejando abordar isso implementando a codificação de 2 passagens em SVT-AV1. Pode-se notar também que configurações de codificação mais rápidas de SVT-AV1 diminuem os tempos de codificação de forma ainda mais dramática, proporcionando uma aceleração significativa do codificador.

Código de vídeo de código aberto precisa de você!

Se você está interessado em nos ajudar a construir SVT-AV1, você pode contribuir no GitHub https://github.com/OpenVisualCloud/SVT-AV1/ com suas sugestões, comentários e, claro, seu código.