如何将 MP4 转换为 AMV?

如何将 MP4 转换为 AMV?

AMV 视频格式是一种专有视频文件格式,专为 MP4 播放器以及具有视频播放功能的 S1 MP3 播放器制作。

如何将 MP4 视频转换为 AMV?

我想这样做以使它在 Bertronic MP3 播放器上运行。

我尝试过

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

下列 (来源) 似乎可以工作,但在 MP3 播放器上它给出了一条错误消息:

    $ 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%

答案1

您可以从以下位置下载修改后的 ffmpeg 副本以支持 AMV:

如何使用:

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

参考: amv 编解码器工具 - HowToConvertToAMV.wiki

我尝试过amvconv-0.1并且它可以在 Ubuntu 16.04 上运行,但我无法在真实设备上测试它。

$ ./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 编解码器输出:

VLC AMV 编解码器

答案2

我发现我必须先使用现代/标准版本的 ffmpeg 转换为 AVI 文件,然后才能使用 ffmpeg-amv 将 AVI 转换为 AMV。我使用的命令如下:

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

注意,在第一个命令中,我将视频缩放到我便宜的视频播放器的分辨率(160x128)。您可能需要根据设备的功能更改分辨率。

我正在使用 Mymahdi 数字紧凑型便携式 MP3/MP4 播放器 和 CentOS 7.5(但我认为这在 Ubuntu 上也同样有效)。

答案3

我创建了一个 amv-ffmpeg 项目的分支,因为我有两个播放器现在需要 AMV 文件。下面是我将文件转换为 AMV 的方法。

使用常规 FFMPEG,我将其转换为 qqvga 大小的单声道 WMV 文件。

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

然后,我使用我分叉的 amv-ffmpeg 将 WMV 转换为 AMV。

amv-ffmpeg -i lucas.wmv lucas.amv

正如您所见,其质量极其糟糕。 动画展示 AMV 文件在廉价的中国 MP4 播放器中播放


要编译 amv-ffmpeg,请执行这些命令。

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

然后可以在 git 创建的目录中名为 bin 的目录中找到 amv-ffmpeg 可执行文件。更多信息请参见我的博客

相关内容