Combine vídeo e áudio e faça a duração final igual à primeira entrada com FFmpeg

0

Eu tenho dois arquivos - video.mp4 e audio.mp3 e quero combiná-los. O vídeo final deve ter duração do video.mp4 .

Eu não sei qual desses dois arquivos é mais longo, então não posso usar a opção -shortest .

Isso é o que eu tenho até agora:

ffmpeg -y -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -c copy final.mp4
    
por Oleg 25.02.2016 / 15:41

2 respostas

3

Use

ffmpeg -y -i video.mp4 -i audio.mp3 -af apad -map 0:v -map 1:a -c:v copy -shortest final.mp4

O apad adiciona silêncio indefinido ao áudio, portanto, o vídeo sempre será o fluxo mais curto.

    
por 25.02.2016 / 16:04
1

A única maneira que encontrei é ter uma função que primeiro retorna a duração do primeiro arquivo. Este é, claro, o script bash, que você pode copiar / colar no shell, ou escrever um script .sh bash.

function getDuration() {
  ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4
}

e, em seguida, use essa função para retornar a duração e use isso com o parâmetro -t

ffmpeg -y -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -t $(getDuration) -c copy final.mp4
    
por 25.02.2016 / 16:03