Depende um pouco de como seus fluxos são mapeados dentro do arquivo mp4. Algo como isso deve funcionar:
ffmpeg -i video.mp4 -i audio.aac -map 0:0 -map 1:0 -vcodec copy -acodec copy newvideo.mp4
Normalmente, o videostream é mapeado como primeiro fluxo no contêiner.
Se não estiver mapeado como primeiro fluxo, altere o mapeamento:
ffmpeg -i video.mp4 -i audio.aac -map 0:1 -map 1:0 -vcodec copy -acodec copy newvideo.mp4
Para descobrir como os fluxos em seu arquivo de vídeo foram realmente mapeados, você pode usar mediainfo
, que está nos repositórios padrão do Ubuntu atualmente.
Se quebrarmos a linha de comando aqui, funciona assim:
-i video.mp4 -> first media file
-i audio.aac -> second media file
-map 0:1 -> use the second stream from the first mediafile
-map 1:0 -> use the first stream from the second mediafile
-vcodec copy -> leave the video as is
-acodec copy -> leave the audio as is
newvideo -> resulting videofile
Certifique-se de que o audiofile e o videofile tenham a mesma duração. Nem todo jogador está aceitando faixas com grandes diferenças de duração.
Por favor, esteja ciente de que avconv
e ffmpeg
são quase a mesma coisa. De fato, este comando usando avconv também funciona como o mesmo comando usando o ffmpeg:
avconv -i video.mp4 -i audio.aac -map 0:0 -map 1:0 -vcodec copy -acodec copy newvideo.mp4
O programa avconv pertence ao projeto Libav, uma bifurcação do projeto FFmpeg. Você também pode ignorar com segurança a seguinte mensagem de erro:
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Uma alternativa para arquivos muxing no formato MP4 é MP4Box
do pacote gpac
.