O que é um arquivo M2TS?
Um arquivo M2TS contém um fluxo de transporte BDAV MPEG-2, a variante do fluxo de transporte MPEG-2 usada pelo Blu-ray Disc e pelo AVCHD, na qual um cabeçalho de 4 bytes precede cada pacote de transporte de 188 bytes. Ele pode multiplexar vídeo, áudio, gráficos de legendas e outros fluxos elementares em um único arquivo.
Como funcionam os arquivos M2TS
O formato Blu-ray Disc somente leitura armazena o áudio e o vídeo de cada clipe como um fluxo de transporte BDAV MPEG-2 em um arquivo .m2ts. O fluxo é uma sequência de pacotes de origem de 192 bytes, cada um com um TP_extra_header de 4 bytes seguido de um pacote de transporte MPEG-2 padrão de 188 bytes, agrupados em unidades alinhadas de 6144 bytes com 32 pacotes. Dentro dos pacotes de transporte, aplicam-se as regras usuais de MPEG-2 Systems: a tabela de associação de programas aponta para uma tabela de mapeamento de programa, que identifica os fluxos elementares do programa pelo identificador de pacote. Em um disco, o arquivo .m2ts é apenas metade de um clipe. Um arquivo .clpi com a mesma numeração armazena as marcas de tempo dos pontos de acesso ao fluxo, e os arquivos de playlist .mpls descrevem o que reproduzir como uma lista de itens de reprodução, cada um com um ponto de entrada e um ponto de saída no eixo de tempo de um clipe. Filmadoras AVCHD gravam no mesmo contêiner, e a descrição do formato da Library of Congress lista mts como uma segunda extensão para ele.
Informações essenciais
- Cada pacote de origem tem 192 bytes: um
TP_extra_headerde 4 bytes seguido de um pacote de transporte MPEG-2 padrão de 188 bytes. Um analisador que percorra o arquivo em pacotes de 188 bytes perderá o alinhamento, pois o byte de sincronização do transporte fica no deslocamento 4 de cada pacote de origem. O demultiplexador MPEG-TS do FFmpeg lida com isso detectando o tamanho dos pacotes e pulando os primeiros 4 bytes de cada pacote de 192 bytes. - Um arquivo
.m2tsisolado contém o fluxo de um clipe, não um título. Em um disco Blu-ray, as playlists.mplsemBDMV/PLAYLISTselecionam intervalos de clipes e sua ordem, e os arquivos de informações de clipe.clpiemBDMV/CLIPINFcontêm as marcas de tempo dos pontos de acesso que um reprodutor usa para encontrar onde começar a leitura. Os títulos ficam um nível acima: a tabela de índice do disco associa cada título a um objeto de filme ou objeto BD-J, e os objetos de filme, armazenados emBDMV/MovieObject.bdmv, iniciam a reprodução de playlists. Portanto, abrir os arquivos emBDMV/STREAMum por um fornece os fluxos de cada clipe sem a ordem de reprodução e os pontos de entrada e saída definidos pelas playlists. - As legendas de Blu-ray podem ficar em dois lugares. Fluxos de gráficos de apresentação em bitmap são multiplexados no fluxo de transporte BDAV junto com vídeo e áudio. As legendas de texto ficam em um clipe separado, fora da multiplexação, que uma playlist vincula por meio de um subcaminho, portanto elas não estão no
.m2tsdo clipe principal. O arquivo de fluxo do clipe de legendas fica emBDMV/STREAMjunto com os clipes de áudio e vídeo, e as fontes das legendas ficam em arquivos.otfseparados no diretórioAUXDATA. - Reempacotar M2TS em outro contêiner com cópia de fluxos mantém o vídeo e o áudio codificados intactos, pois nada é decodificado ou recodificado; o FFmpeg observa que a cópia de fluxos ainda pode falhar quando o contêiner de destino precisa de informações que a origem não fornece. Clipes de Blu-ray podem conter vídeo MPEG-2, H.264/AVC ou VC-1, portanto verifique cada fluxo em relação ao que o contêiner de destino aceita. As legendas mostram o limite: no código-fonte do FFmpeg 8.0, o multiplexador MP4 não tem uma tag de codec para nenhum dos dois codecs de legenda de Blu-ray e rejeita esses fluxos. Clipes de discos comerciais são um caso à parte: a Library of Congress observa que o próprio M2TS não oferece suporte a criptografia, mas que os discos Blu-ray costumam ser protegidos com AACS.
Quando os arquivos M2TS são importantes
Pipelines de mídia encontram M2TS ao ingerir gravações de filmadoras AVCHD ou os arquivos de clipe no diretório BDMV/STREAM de uma estrutura Blu-ray Disc. A decisão importante é tratar um arquivo como um fluxo independente ou como um clipe de um disco: um único .m2ts pode ser demultiplexado por conta própria, mas a ordem de reprodução e as tabelas de pontos de acesso são definidas nos arquivos associados de playlist e informações de clipe, e os títulos do disco, na tabela de índice.
Trabalhar com arquivos M2TS
O multiplexador MPEG-TS do FFmpeg tem um modo m2ts que grava o prefixo de 4 bytes antes de cada pacote de transporte e usa identificadores de pacote fixos. No código-fonte do FFmpeg 8.0, a configuração automática ativa o modo quando o nome da saída termina em .m2ts, e o multiplexador recusa mais de um programa nesse modo. O valor que o FFmpeg grava no prefixo é uma marca de tempo de 30 bits obtida do relógio de programa do fluxo.
Gravar um arquivo de pacotes de 192 bytes não é o mesmo que fazer a autoria de um disco. Uma estrutura BDMV de Blu-ray também precisa de arquivos de índice, objetos de filme, playlists e informações de clipe, e os reprodutores navegam por esses arquivos, em vez dos arquivos de fluxo. Para ler uma playlist em vez de um único clipe, o FFmpeg oferece um protocolo de entrada bluray que lê uma playlist de uma estrutura de disco montada.
Fontes
- Library of Congress: descrição do formato de fluxo de transporte MPEG-2 para discos Blu-ray (BDAV) e AVCHD (M2TS)
- Blu-ray Disc Association: documento técnico, formato Blu-ray Disc somente leitura, 2.B Especificações do formato de aplicação audiovisual para BD-ROM versão 2.5 (2011, cópia arquivada), seções 2.1 a 2.3, 3.1 a 3.6 e 4.1.3
- ITU-T H.222.0 (08/2018) | ISO/IEC 13818-1: MPEG-2 Systems (pacotes de fluxo de transporte, tabelas de associação de programas e de mapeamento de programa)
- Documentação de formatos do FFmpeg: demultiplexador mpegts e multiplexador mpegts (opções do modo m2ts)
- Código-fonte do FFmpeg 8.0: libavformat/mpegts.c (detecção do tamanho dos pacotes, tratamento de pacotes de origem de 192 bytes e tipos de fluxo de legendas de Blu-ray)
- Código-fonte do FFmpeg 8.0: libavformat/movenc.c (tags de codec do multiplexador MP4)
- Documentação de protocolos do FFmpeg: bluray (leitura de uma playlist de Blu-ray)
- Documentação da ferramenta FFmpeg: cópia de fluxos