Como faço para dividir e juntar arquivos usando ffmpeg
enquanto retendo todas as faixas de áudio?
Como você descobriu, uma cópia em bitstream selecionará apenas uma (áudio) faixa, conforme a documentação de especificação de fluxo :
By default,
ffmpeg
includes only one stream of each type (video, audio, subtitle) present in the input files and adds them to each output file. It picks the "best" of each based upon the following criteria: for video, it is the stream with the highest resolution, for audio, it is the stream with the most channels, for subtitles, it is the first subtitle stream. In the case where several streams of the same type rate equally, the stream with the lowest index is chosen.
Para selecionar todas faixas de áudio:
ffmpeg -i InputFile.ts-c copy -ss 00:12:34.567 -t 00:34:56.789 -map 0:v -map 0:a FirstFile.ts
Para selecionar a faixa de áudio third :
ffmpeg -i InputFile.ts -c copy -ss 00:12:34.567 -t 00:34:56.789 -map 0:v -map 0:a:2 FirstFile.ts
Você pode ler mais e ver outros exemplos de seleção de fluxo na seção opções avançadas do ffmpeg
documentação.
Eu também combinaria -vcodec copy -acodec copy
de seu comando original em -c copy
como acima para compactação de expressão.
Divisão:
Assim, combinando aqueles com o que você deseja alcançar nos dois arquivos em termos de divisão para posterior reinserção:
ffmpeg -i InputOne.ts -ss 00:02:00.0 -c copy -map 0:v -map 0:a OutputOne.ts
ffmpeg -i InputTwo.ts -c copy -t 00:03:05.0 -map 0:v -map 0:a OutputTwo.ts
vai te dar:
-
OutputOne.ts
, que é tudo após os dois primeiros minutos do primeiro arquivo de entrada -
OutputTwo.ts
, que é o primeiro 3 minutos e 5 segundos do segundo arquivo de entrada
Participar:
ffmpeg
suporta a concatenação de arquivos sem recodificação, amplamente descrito em sua documentação de concatenação .
Crie sua listagem de arquivos a serem unidos (por exemplo, join.txt
):
file '/path/to/files/OutputOne.ts'
file '/path/to/files/OutputTwo.ts'
Então, seu comando ffmpeg
pode usar o concat demuxer
:
ffmpeg -f concat -i join.txt -c copy FinalOutput.ts
Como você está trabalhando com mpeg
streams de transporte ( .ts
), você deve também usar o