como juntar arquivos ts em mp4 com ffmpeg?

1

Eu faço o download de vários fluxos, pois a velocidade da internet é muito lenta para assistir à alta definição. Quando eu baixo um fluxo eu encontro o arquivo .m3u8 que aponta para os arquivos TS. Então eu uso o seguinte comando:

ffmpeg -i stream.m3u8 vid.mp4

Isso funciona. Mas leva muito tempo porque basicamente tudo regula tudo, mesmo que já seja o formato certo. Para evitar reëncoding eu posso usar este comando:

ffmpeg -i stream.m3u8 -vcodec copy -acodec copy vid.mp4

Isso funciona bem quando eu jogo do começo ao fim sem interupção. Mas quando eu pulo para trás ou para frente, a vlc tem problemas para criar uma imagem. Não é possível exibir corretamente por alguns segundos. Isso é muito chato.

Minha pergunta: Como posso criar o vídeo sem fazer a reencenação completa, mas com uma boa renderização de vlc a qualquer momento?

    
por Nicky Smits 26.01.2015 / 20:02

3 respostas

3

Você está pedindo ao ffmpeg para codificar os arquivos no mp4, ao invés de juntá-los em um único fluxo. Você precisa concatenar em temp.ts e depois convertê-lo em .mp4 com -codec copy .

Além disso, acredito que você precise converter adts em aac na segunda etapa -bsf:a aac_adtstoasc .

    
por 27.02.2015 / 11:17
0

Se você não recodificar, talvez não seja possível alterar os quadros principais etc. do vídeo, resultando no comportamento descrito. Você poderia tentar algo como

ffmpeg -i stream.m3u8 -codec:v" "libx264" "-preset" "ultrafast" vid.mp4

Tenha em mente que o que você ganha em velocidade você perde em qualidade, então "rápido" pode ser melhor ...

    
por 27.06.2016 / 17:29
-1

Veja minha variante com ffmpeg mp4joiner

    
por 24.03.2018 / 13:14