Atualmente estou tentando remover certas faixas de áudio de vários m2ts
arquivos (principalmente para economizar espaço), usando ffmpeg. Ao fazer isso, gostaria que a remoção dessas faixas fosse a única ação aplicada aos arquivos. Portanto, uso o seguinte padrão de linha de comando:
ffmpeg -i input.m2ts -map 0:0 -map 0:2 -codec copy output.m2ts
Aqui, a faixa 0 é uma faixa de vídeo e a faixa 2 é a faixa de áudio que desejo manter. O arquivo de entrada também contém a trilha 1, que é uma trilha de áudio que desejo descartar e que, portanto, não está mapeada.
Como estou usando -codec copy
, espero que cada trilha mapeada seja copiada exatamente como está e que nada seja alterado, incluindo os vários carimbos de data/hora. Mas, como muitas outras pessoas, estou tendo problemas ao executar este comando. Existem muitas mensagens de erro como as seguintes:
Non-monotonic DTS in output stream 0:7; previous: 12978089, current: 12978087; changing to 12978090. This may result in incorrect timestamps in the output file.
Essa mensagem diz claramente que os carimbos de data e hora são alterados de uma forma que pode causar problemas.
Há muitas perguntas e respostas sobre como lidar com essa mensagem. O conselho usual, pelo que entendi, é dar opções ao ffmpeg que o façam ignorar esses erros e calcular o DTS do PTS. Em outras palavras, as soluções comuns também fazem com que o ffmpeg altere os carimbos de data/hora DTS.
Agora tenho as seguintes perguntas:
Por que o ffmpeg se preocupa com carimbos de data e hora errados quando -codec copy
são fornecidos? Os timestamps fazem parte das trilhas, não são? Se sim, eles devem ser copiados inalterados do(s) arquivo(s) de origem para o arquivo de destino, independentemente de estarem corretos ou não, certo?
Que opções posso dar ao ffmpeg para conseguir isso (ou seja, para evitar que ele altere os carimbos de data/hora de alguma forma)?
-codec copy
significa simplesmente não recodificar o fluxo, mas retransmitir os pacotes de fluxo de bits codificados.Os carimbos de data e hora não fazem parte do próprio fluxo de bits codificado. Eles estão sinalizando metadados associados a pacotes. Eles deveriam ser monotônicos, ou seja, não decrescentes em sequência, já que o jogador não pode voltar no tempo para exibir um quadro. Mas devido a erros ou operações de emenda/concat, é possível obter carimbos de data/hora não monotônicos em uma entrada. Quando o muxer os encontra, ele os torna monotônicos, atribuindo o próximo valor mais baixo possível ao pacote atual, geralmente adicionando 1 ao último carimbo de data/hora de saída, antes de gravá-lo na saída. O FFmpeg não permitirá que você ignore esse ajuste e, na prática, não fará diferença.