So, there I was downloading videos from YouTube to include in a PowerPoint for a training course I was producing. Unfortunately, my download tool, wondershare’s excellent video converter, downloaded separate audio and video streams, the video in an MP4 wrapper and the audio as an MP3 file. So I had to mux the two to input them into PowerPoint.
A quick Google search led to a definitive StackExchange article here. I quickly surmised that I had to accomplish two things.
- Convert the MP3 file to AAC since MP4 files can’t include MP3 audio
- Mux the H.264-encoded video and newly AAC-encoded audio into a single file
I tried the following command string which worked the first time.
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac muxed.mp4
To explain, after designating the two input files, the script copies the existing video file as-is (c:v copy), converts the MP3 audio to aac (c:a aac), and muxes the two into muxed.mp4.
Then I tried this:
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a copy muxed.mp4
Interestingly, FFmpeg converted the MP3 audio to AAC and muxed the file without so much as an informational message. Just for fun, I converted audio.mp3 into a wav file and tried this:
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a copy muxed.mp4
As before, FFmpeg converted the WAV file to AAC and produced the muxed file. So, FFmpeg seems pretty error-tolerant with this command.
Of course, if you want to specify the bitrate (-b:a 128k), sample rate (-ar 48000), or channels (-ac 2, for stereo), you should specify the AAC codec (-c:a aac) as below.
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -b:a 128k -ar 48000 -ac 2 muxed.mp4
If you need to swap out audio from an existing file with new audio, check the StackExchange article.
Want to Learn More about FFmpeg?
If you’re looking for a fast and easy way to learn FFmpeg, check out the 2018 Edition of my book, Learn to Produce Video with FFmpeg in 30 Minutes or Less. This edition updates the book to FFmpeg 4.0, and includes.
- Packaging to DASH and HLS formats with open-source tool Bento4
- How to create a hybrid HEVC/H.264 encoding ladder for HLS deployment
- How to encode and package VP9 files into DASH format with FFmpeg 4.0
- How to transcode inputs into multiple files simultaneously using the H.264, HEVC, and VP9 codecs for live ABR streaming
- Encoding to the Alliance for Open Media AV1 format with FFmpeg 4.0