How to convert an MKV to AVI with minimal loss

78,661

Solution 1

In order to just copy the video and audio bitstream, thus without quality loss:

ffmpeg -i filename.mkv -c:v copy -c:a copy output.avi

If you want FFmpeg to convert video and audio automatically:

ffmpeg -i filename.mkv output.avi

Solution 2

 ffmpeg -i "input.mkv" -f avi -c:v mpeg4 -b:v 4000k -c:a libmp3lame -b:a 320k "converted.avi"

My suggestion: use mpeg4+mp3 in avi container.

Solution 3

Try to use ffmulticonverter. Very useful for me: it is a sort of GUI for ffmpeg and you can set easily all the parameters. Moreover you can find a list of all possible video formats.

LP

Solution 4

based on Ken's answer

recursive

find . \( -name '*.mkv' \) -exec sh -c '
  for file do
    target="${file%.*}.avi"
    ffmpeg -i "$file" -f avi -c:v mpeg4 -b:v 4000k -c:a libmp3lame -b:a 320k "$target"
  done' sh {} +

check if everything is right

find . \( -name '*.mkv' \) -exec sh -c '
  for file do
    target="${file%.*}.avi"
    echo ffmpeg -i "$file" -f avi -c:v mpeg4 -b:v 4000k -c:a libmp3lame -b:a 320k "$target"
  done' sh {} +
Share:
78,661
tony_sid
Author by

tony_sid

Born and raised in California. Computers are my main hobby.

Updated on September 17, 2022

Comments

  • tony_sid
    tony_sid over 1 year

    To convert an MKV to AVI, I do two things. The first thing I do is this:

    ffmpeg -i filename.mkv -vcodec copy -acodec copy output.avi
    

    or this:

    ffmpeg -i filename.mkv -sameq -acodec copy output.avi
    

    Either of these will convert the MKV to an AVI, but the problem is that the video does not play smoothly for some reason. That's fine though, because if I do one more thing it gets fixed:

    ffmpeg -i output.avi -vcodec mpeg4 -b 4000k -acodec mp2 -ab 320k converted.avi
    

    After I do this then the file plays without problem. I had success doing it this way for one file, but then I tried it on another file, and there is a slight, but noticeable loss in video quality. This is the output I get when doing the second step:

    FFmpeg version 0.6.1, Copyright (c) 2000-2010 the FFmpeg developers
      built on Dec 29 2010 18:02:10 with gcc 4.2.1 (Apple Inc. build 5664)
      configuration: 
      libavutil     50.15. 1 / 50.15. 1
      libavcodec    52.72. 2 / 52.72. 2
      libavformat   52.64. 2 / 52.64. 2
      libavdevice   52. 2. 0 / 52. 2. 0
      libswscale     0.11. 0 /  0.11. 0
    
    Seems stream 0 codec frame rate differs from container frame rate: 359.00 (359/1) -> 29.92 (359/12)
    Input #0, avi, from 'output.avi':
      Metadata:
        ISFT            : Lavf52.64.2
      Duration: 00:04:17.21, start: 0.000000, bitrate: 3074 kb/s
        Stream #0.0: Video: mpeg4, yuv420p, 704x480 [PAR 229:189 DAR 5038:2835], 29.92 fps, 29.92 tbr, 29.92 tbn, 359 tbc
        Stream #0.1: Audio: vorbis, 48000 Hz, stereo, s16
    Output #0, avi, to 'converted.avi':
      Metadata:
        ISFT            : Lavf52.64.2
        Stream #0.0: Video: mpeg4, yuv420p, 704x480 [PAR 229:189 DAR 5038:2835], q=2-31, 4000 kb/s, 29.92 tbn, 29.92 tbc
        Stream #0.1: Audio: mp2, 48000 Hz, stereo, s16, 320 kb/s
    Stream mapping:
      Stream #0.0 -> #0.0
      Stream #0.1 -> #0.1
    

    I just used arbitrarily large settings on the second step and it worked nicely before but not in this case. What settings should I use?

    • DavidG
      DavidG over 8 years
      This is what ffmpeg gave me for sameq: Option 'sameq' was removed. If you are looking for an option to preserve the quality (which is not what -sameq was for), use -qscale 0 or an equivalent quality factor option.
    • Daniel B
      Daniel B over 4 years
      IIRC this was because the AVI container is so outdated that it cannot properly transport modern codecs. The very least of the problems will manifest during seeking.
  • codemirror
    codemirror over 5 years
    first code created file which was corrupted did not play in VLC.
  • Admin
    Admin almost 2 years
    Thank! This was very useful :) I have a cheap Beamer (Victsing BH486A) which didnt play sound from mkv files. I made avi from it, as in this recursive command, and it works :)