How can I convert an MP4 to AMV?

AMV video format is a proprietary video file format, produced for MP4 players, as well as S1 MP3 players with video playback.

How can I convert MP4 videos to AMV?

I want to do this to make it work on Bertronic MP3-Player.

What I tried

$ ffmpeg -i input.mp4 output.amv
[NULL @ 0x16d2880] Unable to find a suitable output format for 'output.amv'
output.amv: Invalid argument

The following (source) seemed to work, but on the MP3-Player it gave an error message:

    $ ffmpeg -i input.mp4 -map_metadata -1 -c:v amv -f avi -q:v 2 -vf scale="320:-16" -c:a libmp3lame -q:a 4 test.amv.encode.amv
ffmpeg version 2.8.10-0ubuntu0.16.04.1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
  WARNING: library configuration mismatch
  avcodec     configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv --enable-version3 --disable-doc --disable-programs --disable-avdevice --disable-avfilter --disable-avformat --disable-avresample --disable-postproc --disable-swscale --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libvo_aacenc --enable-libvo_amrwbenc
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.40.101
  Duration: 00:04:17.91, start: 0.000000, bitrate: 692 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 854x480 [SAR 1:1 DAR 427:240], 560 kb/s, 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
[swscaler @ 0x1bea0e0] deprecated pixel format used, make sure you did set range correctly
Output #0, avi, to 'test.amv.encode.amv':
  Metadata:
    ISFT            : Lavf56.40.101
    Stream #0:0: Video: amv (AMVF / 0x46564D41), yuvj420p(pc), 320x176 [SAR 4697:4800 DAR 427:240], q=2-31, 200 kb/s, 23.98 fps, 23.98 tbn, 23.98 tbc (default)
    Metadata:
      encoder         : Lavc56.60.100 amv
    Stream #0:1: Audio: mp3 (libmp3lame) (U[0][0][0] / 0x0055), 44100 Hz, stereo, fltp (default)
    Metadata:
      encoder         : Lavc56.60.100 libmp3lame
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> amv (native))
  Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
frame= 6181 fps=500 q=2.0 Lsize=   71370kB time=00:04:17.90 bitrate=2267.0kbits/s    
video:66671kB audio:4302kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.559218%

You may download a modified ffmpeg copy to support AMV from:

  • https://sourceforge.net/projects/amvconv/
  • or https://github.com/tomvanbraeckel/amv-codec-tools/ (Previously was at https://code.google.com/archive/p/amv-codec-tools/)

How to use:

ffmpeg -i <input> -f amv -s <width>x<height> -r 16 -ac 1 -ar 22050 -qmin 3 -qmax 3 <output> 

Reference: amv-codec-tools - HowToConvertToAMV.wiki

I tried amvconv-0.1 and it is working on Ubuntu 16.04, but I can't test it on real device.

$ ./ffmpeg-amv -i ../orig.avi -f amv -s 160x120 -r 16 -ac 1 -ar 22050 -qmin 3 -qmax 3 ../test.amv

$ mediainfo ../test.amv 
General
Complete name                            : ../test.amv
Format                                   : AMV
Format/Info                              : Chinese hack of AVI
File size                                : 8.72 MiB

VLC codec output:

VLC AMV codec


I found I had to use a modern/standard version of ffmpeg to convert to an AVI file first, then I could use ffmpeg-amv to convert from the AVI to AMV. The commands I use are like this:

ffmpeg -i input.mp4 -s 160x128 -y convertedToAVI.avi
./ffmpeg-amv -i convertedToAVI.avi -r 16 -ac 1 -ar 22050 -qmin 3 -qmax 3 convertedToAMV.amv

Note in the first command I scale the video to my cheap video player's resolution (160x128). You may need to change your resolution depending on your device's capabilities.

I'm using a Mymahdi Digital Compact and Portable MP3 / MP4 Player and CentOS 7.5 (but I assume this would work the same on Ubuntu).