Como posso remover vários segmentos de um vídeo, mantendo o áudio, usando o FFmpeg?

1

Eu tentei o método descrito em uma resposta para "Como posso remover vários segmentos de um vídeo usando o FFmpeg?". Funciona bem, exceto que o áudio está faltando. Alguém pode sugerir como obter o vídeo e o áudio na saída?

Exemplo:
Eu tenho um vídeo de 2min tirado nas férias, de um canguru. Existem 2 seções dele (ambas com 6 segundos de duração) que eu quero extrair (incluindo o áudio) em uma única peça curta com apenas esses 2 bits bonitos.
Eu sei que posso extrair dois bits separados e juntá-los, mas o artigo mencionado acima me permitiu fazer exatamente o que eu queria, mas não há nenhum áudio quando você segue esse método.
Eu gostaria de usar uma chamada única similar de ffMpeg.

    
por BruceR 27.02.2014 / 08:27

1 resposta

5

Aqui estou assumindo que o arquivo original está em mp4 container, mas o método também deve funcionar para outros contêineres.

Método de um passo - (um pouco mais envolvido) Veja também a resposta dada pelo ptQa no referenciado thread. Mas aqui está o mesmo com o áudio adicionado:

ffmpeg -i inputfile.mp4 -filter_complex "[0:v]trim=start=10:end=16,setpts=PTS-STARTPTS[a];  [0:v]trim=start=20:end=26,setpts=PTS-STARTPTS[b]; [0:a]atrim=start=10:end=16,asetpts=PTS-STARTPTS[c]; [0:a]atrim=start=20:end=26,asetpts=PTS-STARTPTS[d]; [a][c][b][d]concat=n=2:v=1:a=1[e][f]" -map '[e]' -map '[f]' -strict -2 outputfile.mp4    

Isso adiciona o fluxo de áudio e os pads necessários para obter áudio.

Previsto na perfeição:

A maneira fácil: você pode usar o processo de duas etapas que já conhece:

Primeiro Recorte e extraia as duas partes que deseja do vídeo inteiro.
Segunda Junte essas duas partes juntas.

Este deve ser o caminho mais fácil.

Para recortar uma peça do terceiro até o nono segundo:

ffmpeg -i in.mp4 -ss 00:00:03 -to 00:00:09 -c:v copy -c:a copy part1.mp4    

Você pode repetir o processo para a segunda parte. Se for do 10º ao 16º segundo:

ffmpeg -i in.mp4 -ss 00:00:10 -to 00:00:16 -c:v copy -c:a copy part2.mp4

Veja também este tópico para mais detalhes.

Agora você tem 2 arquivos que você pode participar. Você pode "concatenar" de pelo menos 3 maneiras diferentes. A maneira de fazer isso sem recodificar é fazer isso através da opção demuxer. Crie um arquivo de texto chamado (digamos) joinlist.txt com este conteúdo:

file 'part1.mp4'
file 'part2.mp4'

Para juntar os dois arquivos, coloque os 2 filmes e o texto (joinlist.txt) na mesma pasta e use este comando:

ffmpeg -f concat -i joinlist.txt -c copy joinedfile.mp4
    
por 02.03.2014 / 05:43

Tags