How to convert MKV videos to lossless MP4 videos that are compatible with iOS devices on Windows?

I’m new to FFmpeg (Windows), and need some help.

I want to convert my MKVs to MP4 with as little loss in quality as possible. The MKVs are made with MakeMKV and contain among others DTS soundtrack. They are lossless. The reason I want to convert, is that I plan to stream it to iPads and Apple TV. iPads don’t support DTS and MKVs. The MKVs are both DVDs and Blu-Ray. The MKVs contain video, soundtracks and subtitles.

I have tried this, but get no sound due to DTS soundtrack:

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

Can anybody help me?

What codecs should I use? MP4 is the best for Apple?

6

2 Answers

MP4 is indeed the best format for Apple devices and software. DTS is also indeed not supported, many MP4 video files contain two audio tracks, one DTS and one AAC.

There are multiple encoders available, all of them documented on the ffmpeg wiki. Which codec is available depends on how ffmpeg was compiled. libfdk_aac will give you the best results, but due to this codec being non-free it's not always available.

Things you can try (I put them in the order of my perceived quality, best first)

ffmpeg -i input.mkv -c:v copy -c:a libfdk_aac -b:a 128k output.mp4
ffmpeg -i input.mkv -strict experimental -c:v copy -c:a aac -b:a 192k output.mp4
ffmpeg -i input.mkv -c:v copy -c:a libfaac -b:a 192k output.mp4

If you want to retain the DTS track too, use the -map flag.

Not directly of use for OP, but the OS X program subler makes this process very easy.

EDIT: Comments tl;dr? OP solved problem with the following command

ffmpeg -i input.mkv -strict experimental -map 0:0 -map 0:1 -map 0:2 -map 0:3 -c:v copy -c:a aac -b:a 384 -c:s copy output.mp4

TIP: if -c:s copy for subtitles doesn't work, try -c:s mov_text.
Saved me on multiple occasions.

13

I know this is an old question — and already has an answer – but I wanted to share some commands I am using with FFmpeg on macOS.

An x264 video encoded MP4 with AAC audio from an MKV

Basic conversion of an MKV with an MP4 in it but converting the audio to AAC at 128k. Note the mappings: -map 0:0 means the first (0) track from the source input (0) and the -map 0:1 means the second (1) track from the same source input (0). I like doing this in cases where there are multiple audio tracks so I could do something like select -map 0:3 to get the third track.

ffmpeg -i input.mkv \ -c:v copy \ -c:a aac -b:a 128k \ -map 0:0 -map 0:1 \ output.mp4 \ ;

An HEVC/x265 video encoded MP4 with AAC audio from an MKV

This is similar to the above x264 command, but instead uses the HEVC/x265 to get a smaller file size with the same — if not better quality — video from the source MKV. Note that I prefer to scale iOS videos to 720 when using HEVC/x265; the quality for playback without too much noise is solid on my MacBook, iPad and iPhone. Just be sure your hardware and OS supports HEVC/x265 playback. And be forewarned: HEVC/x265 is very CPU intensive so if your machine doesn’t have a lot of CPU power it can take as long as a day or so to encode 90 minutes of video.

ffmpeg -i input.mkv \ -vf scale=-1:720 \ -c:v libx265 -crf 20 \ -c:a aac -b:a 128k \ -threads 4 \ -tag:v hvc1 \ -map 0:0 -map 0:1 \ output.mp4 \ ;

Here is a breakdown of each of the core parameters other than input and output files.

  • -vf scale=-1:720: Scale the video to 720 height and automatically calculate the width. Note that FFmpeg might choke some MKVs for reasons I am not 100% clear on so you would have to explicitly set the width with something like this: -vf scale=1280:720. Experiment and see what works for you.
  • -c:v libx265 -crf 20: The libx265 is the video encoding codec. The -crf 20 is the CRF (constant rate factor). The default CRF if you don’t specify it is 28, but — as of now — find the quality to be pretty much… Meh. I prefer 20 since it is a very good balance between quality and file size.
  • -threads 4: I like to specify thread counts. 4 is what my system can handle now, but sometimes I ratchet it down to 2 or 3. Higher number is faster if you have enough CPUs to handle it.
  • -tag:v hvc1: The magic metadata setting to put in place for iOS devices to properly play back HEVC/x265 videos.

And that’s about that!

You Might Also Like