Existem várias taxas de quadros "padrão", mas existem tantas que o suporte a taxas de quadros arbitrárias é mais fácil do que o suporte específico a muitas taxas específicas. Isto é especialmente verdade para players de software, como o VLC.
Existe cada vez mais suporte para VARIABLE fps. (VFR, taxa de quadros variável). É aqui que o intervalo entre os quadros no mesmo vídeo não é constante. Muitos formatos de arquivo de contêiner de vídeo (como Matroska ( .mkv
) ou MPEG-4 ( .mp4
intimamente relacionados aos da Apple .mov
)) nem mesmo armazenam um número FPS, mas uma base de tempo (por exemplo, 1/30 de segundo) e depois cada quadro tem um registro de data e hora como um múltiplo dessa base de tempo. Acontece que o intervalo entre cada quadro é um ou um pequeno número inteiro de unidades da base de tempo em um vídeo CFR (taxa de quadros constante).
Filmagens de câmeras de segurança com quadros quase duplicados eliminados seriam um caso de uso óbvio para o VFR. Mais ainda, se estiver sendo compactado com um codec de vídeo simplista que não tira proveito da redundância temporal (com quadros inter (p e b)). (brinque com ffmpeg -vf mpdecimate
para soltar quadros quase duplicados. Use -vsync 2
se estiver produzindo para mp4, porque, por algum motivo, não é o padrão para o muxer, mas é para mkv.)
Outro caso são os smartphones modernos. Por exemplo, o Moto G de meu irmão (2ª geração) grava vídeos VFR. Reduz a taxa de quadros quando o sensor precisa de mais luz. Parte da saída da execução de mediainfo em um mp4 criado pelo software do telefone, gravada dentro de casa:
Bit rate : 9 999 Kbps
Width : 1 280 pixels
Height : 720 pixels
Display aspect ratio : 16:9
Rotation : 90°
Frame rate mode : Variable
Frame rate : 16.587 fps
Minimum frame rate : 14.985 fps
Maximum frame rate : 30.030 fps
A reprodução de um único fluxo de vídeo VFR não é difícil. O software apenas prepara o próximo quadro para exibição, dorme até que seja exibido, depois acorda e o exibe.
As coisas ficam um pouco mais complicadas quando você leva em conta o fato de que os humanos só podem ver os quadros de vídeo quando um monitor os exibe. Existem monitores VFR, mas ainda são raros. (google para g-sync freesync).
Alterar a imagem exibida enquanto está sendo digitalizada para o monitor resulta em um rasgo feio do vídeo (geralmente visto ao jogar um jogo com o vsync desativado). Isso limita o player a alterar a imagem exibida em 50 ou 60Hz. (Os CRTs suportam taxas de vrefresh arbitrárias, dentro de um intervalo, mas é complicado preparar os modos com todos os intervalos corretos, para que a maioria das pessoas use apenas algumas taxas de atualização fixas. E agora as pessoas têm LCDs que suportam apenas uma taxa de atualização fixa de qualquer maneira. de qualquer forma, os monitores freesync são mais difundidos. Estou realmente ansioso por isso :)
Portanto, com taxas de quadros de vídeo que não sejam múltiplos ou um fator da taxa de atualização do monitor, alguns quadros serão exibidos para três atualizações do monitor e outros para 2, por exemplo, mesmo se o vídeo tiver 25FPS constantes (em um monitor de 60Hz).
As coisas ficam mais complicadas quando você deseja trabalhar com vários clipes e desaparecer entre eles, imagem na imagem ou vários outros efeitos. É muito mais fácil escrever um software de edição de vídeo se você puder assumir que todos os clipes têm um novo quadro ao mesmo tempo. (Eles forçam o alinhamento do clipe a encaixar nos quadros inteiros).
É por isso que os NLEs (como kdenlive ou pitivi, para escolher exemplos aleatórios de software livre) têm maior probabilidade de forçá-lo a um FPS fixo e soltar / duplicar quadros de seus clipes para fazê-los corresponder à taxa de quadros. O CFR que você escolher pode ser arbitrário, mas geralmente precisa ser constante para todo o "projeto".
(Algum NLEs funciona totalmente com clipes VFR e produz saída VFR nesse caso?)
Então, em resumo, uma vez que tenhamos monitores e sistemas operacionais de sincronização variável, a única coisa que nos impedirá será a edição de vídeo, eu acho. E radiodifusão, já que aparentemente o CFR também é um grande negócio para isso?
Caso você esteja se perguntando, as taxas de quadro não-inteiras irritantes 29.970 (na verdade 30000/1001) e 23.976 (na verdade 24000/1001, de telecining) são culpa da NTSC colorida. procure por 1.001 . Se eles estivessem dispostos a arriscar que alguns aparelhos P&B não pudessem lidar com uma frequência extra de 0,1% para a subportadora de áudio, o mundo teria sido poupado dessa bobagem. (Acho que vi outro artigo em algum lugar que fazia parecer que muitos sets teriam sido bons, mas eles não tinham certeza sobre a compatibilidade perfeita. A Wikipedia faz parecer que nenhum dos sets teria uma subportadora de áudio 0,1% maior. fatos.)
No entanto, taxas de quadros irritantes são um dos pecados menores da transmissão. É realmente um entrelaçamento que tem sido a ruína da qualidade do vídeo em telas modernas (todos os pixels acesos de uma vez), e isso não teria mudado. Ainda não entendi por que o entrelaçamento foi mantido para HDTV. Por que 1080i60 já foi definido, em vez de usar 720p60 para obter a mesma resolução temporal para esportes e outras coisas? É semelhante a 1920x540p60, mas com um deslocamento vertical estúpido entre campos pares e ímpares que exige muita computação na extremidade de recebimento para que não pareça horrível.
editar:
Para o seu caso de uso, sugiro absolutamente arquivar no FPS nativo. Não jogue fora nenhuma informação descartando quadros. Não duplique os quadros e aumente os arquivos (ou faça com que o codificador h.264 gaste mais tempo observando as duplicatas e produzindo um quadro cheio de macroblocos de salto que leva apenas 20 bytes para todo o quadro).
No futuro, quando esperamos que todos tenhamos exibições de freesync que possam reproduzir qualquer taxa de quadros, você desejará desfazer o pullup para 24fps para que o vídeo seja reproduzido de maneira mais suave! Ou se o freesync de alguma forma não captar, ou se a tela que vem depois dos LCDs for CFR, a conversão da taxa provavelmente será melhor realizada no momento da reprodução. Não é como se os 24fps tocassem perfeitamente em um monitor de 60Hz. (Eu não noto visualmente o fato de que alguns quadros são exibidos para 3 * 1/60, enquanto outros são exibidos para 2 * 1/60, mas é verdade).
Se você está tendo problemas com o Quicktime, IDK. Talvez verifique se o Handbrake está criando arquivos com a taxa de quadros correta definida no fluxo de bits h.264 e no contêiner. (Sim, os cabeçalhos h.264 aparentemente podem armazenar uma taxa de quadros, separada do que o contêiner diz. Consulte os documentos mkvmerge --fix-bitstream-timing-information
. E tente usá-lo --default-duration 16fps
para criar um arquivo mkv. Em seguida, muxe de volta para mp4 e veja se isso corrige o quicktime? ) Ou talvez exista uma maneira de fazer isso com as ferramentas mp4. Veja por exemplo: /ubuntu/370692/how-to-change-the-framerate-of-a-video-without-reencoding
Posso garantir que a taxa de quadros arbitrária mp4 é válida e até a taxa de quadros variável mp4 é válida. Se o Quicktime jogar errado, pode ser culpa do Quicktime. Ou talvez a culpa do Handbrake tenha cometido um erro no arquivo. Normalmente, apenas uso o ffmpeg diretamente, porque sou um ninja da linha de comando.