Convertendo um ATSC TS para MKV, incluindo todas as trilhas de áudio e closed caption do FFMPEG

0

Eu estou supondo que isso pode ser feito de alguma forma, porque eu vi programas que são um front-end GUI para o FFMPEG que essencialmente fazem isso, mas eu estou tentando descobrir isso a partir de uma linha de comando no Ubuntu. Eu quero transcodificar a partir de um fluxo de vídeo MPEG2 de uma gravação ATSC para h264, mas apenas manter todos os canais de áudio como está. Também gostaria de converter legendas ocultas para uma faixa de legendas no wrapper MKV final. Além disso, é possível marcar pelo menos a trilha de áudio primária e as faixas de legenda como sendo " En glish"? Para torná-lo ainda mais impressionante, fazendo deste um script BASH onde eu posso nomear o arquivo de entrada e salvá-lo como o mesmo nome, mas alterá-lo para .mkv faria perfeito. Eu não tenho conhecimento para escrever o script a partir do zero, nem sei as variáveis adequadas para o comando FFMPEG.

    
por PCSO SAR COMM 04.09.2018 / 20:38

1 resposta

0

É um pouco complicado, mas aqui está um método de trabalho:

INFILE=input.ts
OUTFILE=output.mkv
ffmpeg \
  -i "${INFILE}" \
  -f lavfi -i movie="${INFILE}[out+subcc]" \
  -map 0 -map 1:s \
  -codec:v libx264 \
  -codec:a copy \
  -codec:s srt \
  -metadata:s:s:0 language=eng \
  "${OUTFILE}"

Aqui, input.ts e output.mkv são seus arquivos de entrada MPEG-TS e de saída Matroska desejados, respectivamente. Generalizar para um roteiro é deixado como um exercício para o leitor.

Interpretando os parâmetros linha a linha:

-i ... é o arquivo de entrada.

-f lavfi -i ... nos permite extrair o fluxo de legenda incorporado.

-map 0 -map 1:s seleciona os fluxos para saída.

-codec:v libx264 diz ao ffmpeg para converter o vídeo para H.264.

-codec:a copy copia todos os fluxos de áudio para a saída inalterada.

-codec:s srt diz ao ffmpeg para converter as legendas incorporadas para SRT.

-metadata:s:s:0 language=eng define o idioma do fluxo de legendas para inglês.

Notas:

  • Eu só usei isso com transmissões ATSC pelo ar, incluindo o que eu suponho serem legendas EIA-608. Não tenho idéia se funciona com gravações QAM (cabo), embora eu espere que isso aconteça.
  • Você pode ter problemas com nomes de arquivos de entrada contendo determinados caracteres, mesmo se você colocar o nome do arquivo entre aspas.
  • Isso copia todos os fluxos de áudio. Se você quiser apenas o primeiro, será preciso mapear explicitamente os fluxos individuais a partir da entrada 0.
  • É provável que os fluxos de áudio já tenham um idioma definido. Caso contrário, adicione outra opção -metadata para definir o idioma do fluxo de áudio também.
  • Provavelmente você vai querer experimentar a qualidade da codificação de vídeo usando a opção -crf. Se o vídeo de entrada estiver entrelaçado, convém desentrelaçar e dimensionar para 720p adicionando -filter:v bwdif=0,scale=1280:720 após as linhas -map .
por 09.09.2018 / 06:41