Convert MKV with DTS sound to MP4 video with AAC or AC3 audio

I've got a 4.3 GB 720p movie and want to convert this MKV with DTS sound to MP4 video with AAC or AC3 audio.

I sometimes get:

ffmpeg: unrecognized option '-c:v'

…and:

aac unrecognized

¬and other similar stuff.

I want this movie to have small size like those found on torrent sites.


Solution 1:

Make sure you run the latest version of FFmpeg. For Windows and Linux, static builds are availabe from the homepage. For macOS, you can install FFmpeg through Homebrew.

Then, in the simplest case run:

ffmpeg -i input.mkv -c:v libx264 -c:a aac out.mp4

Setting video quality

For controlling video quality, set the crf parameter, which defaults to 23. Lower means better quality, but higher file size. Try values between 19 and 26 to see what fits best. You can also set a certain bit rate, depending on which file size you want. Here, for example, 500 kBit/s:

ffmpeg -i input.mkv -c:v libx264 -crf 23 …
ffmpeg -i input.mkv -c:v libx264 -b:v 500k …

For audio, you can set the bit rate too, with -b:a.

Multiple channel audio

If your audio stream is using multiple channels (e.g. 5.1 sound), you need to use another AAC encoder (libfdk_aac). This encoder is not available in the static builds, but can be obtained with the pre-packaged / Homebrew versions of ffmpeg.

ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a libfdk_aac -b:a 384k out.mp4

Copying all streams

In case your input file has more than one video, audio and subtitle stream, ffmpeg by default does not convert all of them.

Use -map 0 to instruct ffmpeg to take all streams from the input file (see the FFmpeg Wiki for more info). This is useful for retaining different languages and subtitles that might be in the original.

ffmpeg -i input.mkv -c:v libx264 -c:a aac -map 0 out.mp4

Solution 2:

You may do this:

ffmpeg -i input.mkv -c:v copy -c:a libfaac out.mp4

Or if there is no joy, try fixing the internal bitstream

Conversion to stereo and asc:

ffmpeg -i input.mkv -c:v copy -c:a libfaac    \
-bsf:a aac_adtstoasc -ac 2 -ar 48000 -ab 256k \
out.mkv

If it is 5.1, surround and the voices are hard to hear it is because the dialog is on the center channel and you are only hearing the off-mike from the R & L channels but the music and sound effects are booming.

You can compensate for this with dolby-II filter to get the surround channel cut way down and the center channel split into stereo, and combine them all into right and left stereo channels.

ffmpeg -i input.mkv -c:v copy -c:a libfaac -bsf:a aac_adtstoasc   \
  -af aresample=matrix_encoding=dplii -ac 2 -ar 48000 -ab 256k    \
  out.mkv