Add an audio file to and mkv video

I'm quite new to multimedia things, I'm trying to find a way to make nice screencasts, I've already been able to capture my desktop with ffmpeg:

$ ffmpeg -f alsa -ac 2 -i hw:0,0 -f x11grab -r 30 -s $(xwininfo -root | grep 'geometry' | awk '{print $2;}') -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 -y out.mkv

It works pretty nice, but I'd like to add music in the background, if I add it with mencoder:

mencoder  -ovc copy -oac mix -audiofile track.mp3 out.mkv -o out.mp4

It delete the video sound, I don't want to replace it, I want to add music to my explanation, any ideas?


Solution 1:

You can install mkvtoolnix;

sudo apt-get install mkvtoolnix

Then use mkvmerge from the installation to mux audio and video into the mkv container from the command line.

There is also a Gui tool, mkvtoolnix-gui that is a front end to mkvtoolnix.

sudo apt-get install mkvtoolnix-gui

Example to mux video file called, input-video.mkv with a sound file called soundfile.mp3, creating a new muxed mkv file called output-with-sound.mkv, do the following in the directory where you have the video without audio and the audio file:

mkvmerge -o output-with-sound.mkv -A input-video.mkv soundfile.mp3

More examples including synchronization here: http://www.bunkus.org/videotools/mkvtoolnix/doc/mkvmerge.html

Solution 2:

kdenlive and add a second audio track, then remux

Solution 3:

I'm not sure why mencoder didn't work for you, but you can also do the same thing with ffmpeg. You just need to use two inputs to ffmpeg.

 ffmpeg -i track.mp3 -i out.mkv -vcodec copy -acodec libfaac -ab 192k final.mkv

I didn't try it, but I don't think you can do -acodec copy, especially since you're using two different codecs. Just pick whatever you want in the output and add that in, its really fast compared to the video.