Como converter um arquivo .ts para um formato mainstream sem perdas?

13

Eu tenho um arquivo que termina em .ts (por exemplo, aqui estão os primeiros 10 MB ). Gostaria de convertê-lo para um formato de fluxo mais principal (por exemplo, mp4, MPEG2-PS ...), de uma maneira sem perdas, se possível (ou seja, remuxando).

Eu li o Como converter arquivos .ts em algo útil? questão. Eu tentei avidemuxcom as configurações "copiar" para os fluxos de vídeo e áudio e o formato de contêiner "PS" para MPEG. Isso falhou com a mensagem de erro "Áudio incompatível / Para DVD, o áudio deve ser 48 kHz MP2 (estéreo), AC3, DTS ou LPCM (estéreo)".

Eu também tentei o comando da CLI sugerido.

avconv -i 10MB.ts -vcodec copy -acodec copy 10MB.mpg

O arquivo de saída possui o vídeo certo, mas sem som, pelo menos quando reproduzido com o VLC. Isso é bastante intrigante, porque avconvparece ter detectado corretamente o fluxo de áudio.

Input #0, mpegts, from '10MB.ts':
  Duration: 00:00:06.36, start: 51523.824800, bitrate: 12563 kb/s
  Program 37888 
    Stream #0.0[0x100]: Video: mpeg2video (Main), yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 20000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x110]: Audio: aac, 0 channels, fltp, 144 kb/s
    Stream #0.2[0x130]: Data: [6][0][0][0] / 0x0006
    Stream #0.3[0x138]: Data: [6][0][0][0] / 0x0006
    Stream #0.4[0x140]: Data: [13][0][0][0] / 0x000D
    Stream #0.5[0x160]: Data: [13][0][0][0] / 0x000D
    Stream #0.6[0x161]: Data: [13][0][0][0] / 0x000D
    Stream #0.7[0x162]: Data: [13][0][0][0] / 0x000D
    Stream #0.8[0x170]: Data: [13][0][0][0] / 0x000D
    Stream #0.9[0x171]: Data: [13][0][0][0] / 0x000D
    Stream #0.10[0x172]: Data: [13][0][0][0] / 0x000D
Output #0, mpeg, to '10MB.mpg':
  Metadata:
    encoder         : Lavf54.20.4
    Stream #0.0: Video: mpeg2video, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], q=2-31, 20000 kb/s, 90k tbn, 90k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)

Eu também tentei o comando da CLI sugerido nos comentários de outra pergunta .

avconv -i 10MB.ts -c:v copy -c:a libfaac 10MB.mp4

Novamente, nenhum som no arquivo de saída.

Edição: Eu tentei VLC, como sugerido por @ Daniel. Foi quase perfeito. Foi rápido e fácil de usar. Eu apenas tive que clicar em "Converter / Salvar", adicionar o arquivo de entrada, selecionar o perfil MP4, configurar o codec de vídeo e codec de áudio para "Manter trilha de vídeo / áudio original", escolher um arquivo de destino e clicar em "Iniciar". O vídeo parecia perfeito, mas o áudio estava de alguma forma ligeiramente corrompido, mas pode ser causado por algo bastante exótico no fluxo de áudio do meu vídeo.

lacton
fonte
Você já experimentou o VLC? videolan.org/vlc/index.html
Daniel
Você mencionou que queria remuxar, não recodificar, se possível. Tem certeza de que o VLC está apenas remuxando?
Llogan
@LordNeckbeard Good point! Como posso ter certeza?
lactona
Não estou familiarizado com o VLC para conversão, mas adicionei uma resposta usando ffmpeg.
Llogan
O VLC converterá qualquer coisa para qualquer coisa com excelente perda. Basicamente, você está limitado pelo formato que escolheu.
Daniel

Respostas:

22

Matroska (MKV)

Isso transmitirá a cópia (re-mux) de todos os fluxos:

ffmpeg -i input -map 0 -c copy output.mkv

A -map 0opção é usada para incluir todos os fluxos. Caso contrário, ele usará o comportamento de seleção de fluxo padrão que resultaria em apenas um fluxo por tipo de fluxo sendo selecionado. Como o Matroska pode lidar com a maioria dos fluxos arbitrários que eu incluí -map 0.

MP4

Isso transmitirá a cópia (re-mux) de todos os fluxos:

ffmpeg -i input -map 0 -c copy output.mp4
  • Se seus formatos de entrada não forem compatíveis com MP4, você receberá um erro.
  • Seu player / dispositivo pode não suportar todos os formatos arbitrários, menos comuns ou herdados, mesmo que sejam suportados pelo MP4.
  • Em caso de dúvida, re-codifique para H.264 + AAC, como mostrado abaixo.

Isso irá recodificar o vídeo para H.264 e copiar o áudio em stream:

ffmpeg -i input.ts -c:v libx264 -c:a copy output.mp4

O próximo exemplo irá recodificar o vídeo e o áudio:

ffmpeg -i input.ts -c:v libx264 -c:a aac output.mp4

Exemplo H.264 sem perdas:

ffmpeg -i input.ts -c:v libx264 -crf 0 -c:a copy output.mp4

Arquivos sem perdas serão enormes.

Veja FFmpeg Wiki: H.264 para mais informações.

llogan
fonte
Se você deseja codificar um arquivo MP4 sem perdas, adicione -qp 0 ou -crf 0, conforme mencionado na página wiki do FFMpeg: trac.ffmpeg.org/wiki/Encode/H.264
SuperSluether
2
@SuperSluether Lossless cria arquivos enormes. Por "sem perdas", acredito que lacton significava "remuxing".
Llogan
O arquivo de exemplo que forneci está realmente truncado. O arquivo que eu quero remuxar é muito grande para facilitar o compartilhamento.
lactona
1
@lacton Tente muxing em matroska: ffmpeg -i 10MB.ts -c copy output.mkv. Você vai ter erro: Error parsing AAC extradata, unable to determine samplerate. É por isso que meu exemplo MKV recodificou o áudio. Veja também # 4472: A cópia do AAC do fluxo sem falha de codificação e lavf / mkv: corrija o remuxing do AAC . No entanto, nada disso pode se aplicar ao seu arquivo de entrada grande e não truncado e pode funcionar conforme o esperado.
Llogan
1
@LordNeckbeard ffmpeg -i input -c:v copy -c:a aac output.mkvfuncionou perfeitamente. O vídeo foi remuxado e o áudio soa tão bom quanto o original, sem a leve corrupção que tive ao converter com o VLC.
lactona
3

O VideoLAN (VLC - http://www.videolan.org/vlc/index.html ) converterá facilmente praticamente qualquer coisa em qualquer coisa.

Experimente. É executado no Linux, Windows e Mac OS X e possui uma interface muito amigável.

Daniel
fonte
Agora que eu usei o VLC para conversão de vídeo, eu o recomendaria. Obrigado por esta sugestão. Para o meu arquivo .ts, quase funcionou. O vídeo parecia perfeito, mas o áudio estava de alguma forma ligeiramente corrompido. Pode ser causado por algo bastante exótico no fluxo de áudio do meu vídeo. Eu editei a pergunta original para incluir isso.
lactona
Sim, pode funcionar melhor se você usar um subcontêiner diferente para o áudio dentro do mp4. Talvez RAW.
Daniel
0

Como complemento à outra resposta de @llogan - como uma cópia de fluxo é preferível de qualquer maneira:

Utilizo há muito tempo alguns comandos para extrair áudio sem alterar o nome dos arquivos, que podem ser adaptados aos apresentados aqui, para integrá-los aos menus de contexto dos gerenciadores de arquivos.

Portanto, para "desmuxificação e muxing" sem alterar o nome do arquivo, use:

ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv

Eu adicionei isso às ações personalizadas do Thunar e à ferramenta de configuração de ações do FileManager (Nautilus, Nemo, Caja, PCManFM), da seguinte forma:

sh -c 'ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv' %f

enquanto o restringe a "* .ts" em Thunar e video/mp2tem Ações do FileManager.

cipricus
fonte