9

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%
Martin Thoma
  • 20,605
  • Check this: https://ubuntuforums.org/showthread.php?t=2254046 the ffmpeg command in the third post should work. – Jonas Czech Dec 26 '16 at 10:17
  • @JonasCz No, it doesn't. That is exactly the command I've tried (see above). ffmpeg does something, but the file cannot be played on the device. – Martin Thoma Dec 26 '16 at 12:33
  • What version of ffmpeg are you using? The one from the Ubuntu repositories? I tried your example on a test file with the static builds which, contrary to user.dz, won't play in my VLC, but in ffplay and mpv, I don't think I have a device to test such file formats though. – LiveWireBT Dec 26 '16 at 15:34
  • @JonasCz Good to see that old Ubuntu Forums post of mine is still useful :) – andrew.46 Dec 30 '16 at 02:55

3 Answers3

3

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

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

user.dz
  • 49,295
  • 2
    You are aware the Google Code hosting has ceased to be? The reference link is broken as well es the other link to Google. Also is the audio down sampling really necessary? – LiveWireBT Dec 26 '16 at 15:25
  • @LiveWireBT, Thank you I couldn't find another source for that wiki page, I fixed the project page too. No, I'm not sure about that, as I remember S1-mp3/-mp4 devices were able to play Stereo mp3 files with 44K sampling rate. I don't have that device any more to test. – user.dz Dec 26 '16 at 15:52
1

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).

Jim
  • 111
0

I made a fork of the amv-ffmpeg project because I have two players that now require AMV files. Here is how I convert files to AMV.

Using regular FFMPEG, I convert to a qqvga-size mono WMV file.

ffmpeg -i lucas.mp4 \  
       -vcodec msmpeg4 -q:v 1 -s qqvga -r 16 \  
       -acodec wmav2 -ac 1 -ar 22050 \  
       lucas.wmv

Then, I use my forked amv-ffmpeg to convert the WMV to AMV.

amv-ffmpeg -i lucas.wmv lucas.amv

The quality, as you can see, is atrocious. Animation showing AMV file playing in a cheap Chinese MP4 player


To compile amv-ffmpeg, execute these commands.

git clone https://github.com/vsubhash/amv-ffmpeg.git
cd amv-ffmpeg
./configure
make

The amv-ffmpeg executable can then be found in a directory named bin inside the directory created by git. More information is available my blog.