Resumo
O sensor da câmera do seu celular é fixo no corpo do aparelho, na orientação horizontal. Quando você filma segurando o celular em pé, o sensor continua gravando um quadro horizontal; o celular apenas escreve no arquivo um indicador dizendo “exiba isto girado 90°”. Todo player do celular respeita esse indicador. Alguns programas em outros lugares, como editores antigos, certos players web e alguns fluxos de upload, ignoram ou removem o indicador, e o resultado é um vídeo que toca de lado. Recolocar o indicador é uma edição de metadados: leva uma fração de segundo, seja qual for o tamanho do arquivo, e não recodifica nada.
O que o indicador realmente é
Um arquivo MP4 ou MOV é uma árvore de caixas. A que descreve a apresentação de uma faixa de vídeo se chama tkhd (track header) e contém uma matriz de transformação 3 × 3 (nove números, 36 bytes) que o player aplica a cada quadro antes de desenhá-lo. Num vídeo sem rotação, a matriz é a identidade. Num vídeo gravado com o celular em pé, é uma rotação de 90°. Os pixels no arquivo estão na horizontal; a matriz diz “gire-os”. O Android grava a mesma informação num valor rotation separado; o ffmpeg informa os dois como rotate: 90 nos metadados do stream.
Esse projeto é intencional. Girar os pixels de verdade durante a gravação custaria uma passagem extra completa pelo codificador em cada quadro, na bateria. Escrever nove números não custa nada. É o mesmo raciocínio da orientação EXIF nas fotos, e falha do mesmo jeito: qualquer programa que não lê a tag mostra a orientação bruta.
Quem descarta o indicador
- Editores e players de desktop mais antigos, escritos antes de os celulares gravarem vídeo na vertical. O VLC e o QuickTime respeitam a matriz há anos; alguns sistemas de vídeo corporativos e versões antigas do Windows Media Player, não.
- Transcodificadores que copiam o stream de vídeo, mas reconstroem o contêiner. Uma ferramenta que promete “sem recodificação, sem perdas” ainda pode escrever um
tkhdnovo com a matriz identidade. Os pixels sobrevivem; a instrução, não. - Alguns uploads na web. Um site que refaz o contêiner no upload pode perder a tag; um site que recodifica normalmente aplica a rotação de forma correta.
- Concatenação. Juntar um clipe vertical e um horizontal num único arquivo deixa a faixa combinada com uma só matriz; uma das duas metades vai ficar errada.
Duas correções, uma delas sem custo
Reescrever a matriz. Defina a matriz tkhd (ou o campo de rotação) com o valor que faz o vídeo aparecer corretamente. É a escrita de algumas dezenas de bytes num arquivo que pode ter gigabytes; os streams de vídeo e de áudio são copiados sem alteração. Meio segundo, sem perda de qualidade, mesmo tamanho de arquivo. É isso que o Girar Vídeo faz por padrão: lê o arquivo no seu aparelho, escreve o cabeçalho corrigido e devolve o arquivo. Como nada é decodificado, funciona numa gravação de 4 GB tão rápido quanto numa de 4 MB.
Recodificar com a rotação aplicada. Decodificar cada quadro, girar os pixels e codificar de novo. Só é necessário quando se sabe que o destino ignora a matriz e não há como trocá-lo, como um player de sinalização digital ou um CMS legado. Leva o tempo de duração do vídeo (ou mais, sem codificador por hardware) e acrescenta uma geração de perda de qualidade. O Girar Vídeo oferece isso como segunda opção, usando o codificador WebCodecs do navegador, e avisa na interface porque é o caminho caro.
Por que a correção “sem custo” às vezes não funciona
Se o vídeo aparece deitado em um programa e correto nos outros, esse programa ignora a matriz, e reescrevê-la não vai ajudar; só aplicar a rotação nos pixels resolve. Se ele aparece deitado em todo lugar, a matriz se perdeu, e reescrevê-la é a solução. Um teste rápido: abra o arquivo num navegador atual (Chrome, Safari e Firefox respeitam a tag). Deitado no navegador → a matriz está errada ou ausente → reescreva. Correto no navegador e deitado no outro programa → o problema é o programa → aplique a rotação nos pixels.
Armadilhas relacionadas
- Miniaturas. Um quadro capturado de um vídeo deitado também sai deitado, porque a imagem é tirada do stream, não da exibição. Corrija o vídeo primeiro e depois capture o quadro.
- Corte. Cortar sem recodificar preserva a matriz; cortar com uma ferramenta que refaz o contêiner pode não preservar. Se um trecho cortado volta deitado, o cortador descartou a tag, e uma reescrita da matriz a recoloca.
- Vídeo espelhado da câmera frontal. É outro indicador (uma inversão horizontal na mesma matriz), e vale a mesma correção.