Como mesclar arquivos de áudio e vídeo no ffmpeg

161

Quero mesclar um arquivo de áudio (formato .wav ou .au) com um arquivo de vídeo (formato .mp4).

Por favor, sugira-me como conseguir isso. Quero mesclar esses arquivos em um novo arquivo de vídeo .mp4. Um comando ffmpeg seria muito bem-vindo.

Sandy
fonte
Há um artigo decente aqui que podem ser úteis também ... cfc.kizzx2.com/index.php/muxing-audio-and-video-with-ffmpeg
Simon Médio

Respostas:

260

Mesclando vídeo e áudio, com recodificação de áudio

Veja este exemplo, extraído desta entrada do blog, mas atualizado para obter uma sintaxe mais recente. Deve ser algo para o efeito de:

ffmpeg -i video.mp4 -i audio.wav \
-c:v copy -c:a aac -strict experimental output.mp4

Aqui, assumimos que o arquivo de vídeo ainda não contém fluxo de áudio e que você deseja ter o mesmo formato de saída (aqui, MP4) que o formato de entrada.

O comando acima transcodifica o áudio, pois os MP4s não podem transmitir fluxos de áudio PCM. Você pode usar qualquer outro codec de áudio desejado, se desejar. Consulte o Guia de codificação do AAC para obter mais informações.

Se o seu fluxo de áudio ou vídeo for mais longo, você poderá adicionar a -shortestopção para que o ffmpeg pare de codificar assim que um arquivo terminar.

Copiando o áudio sem recodificar

Se o seu contêiner de saída puder manipular (quase) qualquer codec - como MKV -, você poderá simplesmente copiar os fluxos de áudio e vídeo:

ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv

Substituindo o fluxo de áudio

Se a sua entrada de vídeo já contém áudio e você deseja substituí-la, você precisa informar ao ffmpeg qual fluxo de áudio deve ser:

ffmpeg -i video.mp4 -i audio.wav \
-c:v copy -c:a aac -strict experimental \
-map 0:v:0 -map 1:a:0 output.mp4

A mapopção faz com que o ffmpeg use apenas o primeiro fluxo de vídeo da primeira entrada e o primeiro fluxo de áudio da segunda entrada para o arquivo de saída.

Patrick Georgi
fonte
Eu tentei, mas ffmpeg está congelando enquanto fundindo
Sandy
4
Eu não acho que os contêineres mp4 podem ter fluxos de áudio wav. Tenteffmpeg -i audio.wav -i video.mp4 -acodec copy -vcodec copy -f mkv output.mkv
Lucas
1
Estou usando isso e ele está substituindo o áudio original do áudio de entrada. E se eu quiser mesclar o áudio de entrada com o áudio da entrada de vídeo?
Iqbal Malik
Linhas de comando muito doces ...
Chandra Nakka
Ótimo, eu usei o ffmpeg -i video.mp4 -i audio.wav \ -c: v copy -c: uma saída experimental restrita aac.mp4 para mesclar MP3 com arquivo Wav ... => mp4 5 minutos, processado em 30 segundos ..Obrigado
sonida
12

Como não tenho permissão para escrever comentários para a primeira resposta com minha reputação, um adendo aqui, porque tive esse problema ao codificar webms.
Se o seu fluxo de áudio for, por exemplo, mais longo que o fluxo de vídeo , será necessário cortá-lo ou, caso contrário, você terá o último quadro de vídeo como imagem estática e áudio em execução.

Para cortar qualquer fluxo, você pode usar -ss [hh: mm: ss] -t [ss] antes de cada um dos -i "file.ext".
-ss [...] definirá o ponto inicial para cortar
-t [...] definirá a duração do segmento em segundos

Exemplo:

ffmpeg.exe -ss 00:00:10  -t 5 -i "video.mp4" -ss 0:00:01 -t 5 -i "music.m4a" -map 0:v:0 -map 1:a:0 -y out.mp4
user136036
fonte
4
Você também pode usar apenas -shortestpara cortar o final.
nyuszika7h
5

comando open-open promt (windows + r -> cmd-> enter)

-então vá para dentro da pasta onde você tem arquivos de áudio e vídeo

aplique esse cmd

ffmpeg -i "videoFile.mp4" -i "audioFile.mp3" -shortest outPutFile.mp4

Digite .... você receberá um novo arquivo chamado outPutFime.mp4 (um arquivo mesclado de áudio e vídeo)

UniCoder
fonte
2
Realmente não é necessário descrever como usar a linha de comando aqui. Está praticamente implícito que os usuários serão capazes de descobrir isso. Especialmente porque o solicitante especificou FFmpeg. Mesmo assim, a -shortestetiqueta é muito bacana. Muito mais simples do que na resposta do @ user136036.
Kat
3
Isso irá recodificar tudo, o que provavelmente não é o que se deseja.
Mivk
'ffmpeg' não é reconhecido como um comando interno ou externo,
UniCoder
Você deve adicionar o ffmpeg ao PATH wikihow.com/Install-FFmpeg-on-Windows
Arete
5

Isso funcionou para mim:

ffmpeg.exe -i AudioT.m4a -i VideoT.mp4 -acodec copy -vcodec copy muxed.mp4
Ronald
fonte
1
a sua parte trabalhando para mim, não funciona para todas as entradas, alguns resultando vídeos de entrada permanece mesmo na saída
Narendra Singh
1

Tente usar o mencoder (sim, é baseado no ffmpeg, mas você nunca sabe). Eu uso o -audiofileargumento. No entanto, geralmente uso o ffmpeg, portanto, siga este conselho com uma pitada de sal.

E, se você usa o Windows, o Mediacoder (que infelizmente não é mais de código aberto) funciona ... é basicamente uma interface para muitos codificadores de gnu e alguns não-livres.

Wyatt8740
fonte