[FFmpeg-user] amr_nb in mp4 container?

Ferdi Scholten ferdi at sttc-nlp.nl
Thu Feb 15 09:25:03 EET 2024


I managed to make video with amr_nb codec in openCamera (android 11)
> ====
> mediainfo /dev/shm/VID_20240215_064913.mp4
> General
> Complete name                            : /dev/shm/VID_20240215_064913.mp4
> Format                                   : MPEG-4
> Format profile                           : Base Media / Version 2
> Codec ID                                 : mp42 (isom/mp42)
> File size                                : 21.1 MiB
> Duration                                 : 5 min 2 s
> Overall bit rate mode                    : Variable
> Overall bit rate                         : 586 kb/s
> Frame rate                               : 19.929 FPS
> Encoded date                             : 2024-02-15 03:54:16 UTC
> Tagged date                              : 2024-02-15 03:54:16 UTC
> com.android.version                      : 11
>
> Video
> ID                                       : 1
> Format                                   : AVC
> Format/Info                              : Advanced Video Codec
> Format profile                           : Constrained Baseline at L2
> Format settings                          : 1 Ref Frames
> Format settings, CABAC                   : No
> Format settings, Reference frames        : 1 frame
> Format settings, GOP                     : M=1, N=30
> Codec ID                                 : avc1
> Codec ID/Info                            : Advanced Video Coding
> Duration                                 : 5 min 2 s
> Source duration                          : 5 min 1 s
> Bit rate                                 : 562 kb/s
> Width                                    : 640 pixels
> Height                                   : 480 pixels
> Display aspect ratio                     : 4:3
> Frame rate mode                          : Variable
> Frame rate                               : 19.929 FPS
> Minimum frame rate                       : 9.998 FPS
> Maximum frame rate                       : 30.010 FPS
> Standard                                 : Component
> Color space                              : YUV
> Chroma subsampling                       : 4:2:0
> Bit depth                                : 8 bits
> Scan type                                : Progressive
> Bits/(Pixel*Frame)                       : 0.092
> Stream size                              : 20.2 MiB (96%)
> Source stream size                       : 20.2 MiB (96%)
> Title                                    : VideoHandle
> Language                                 : English
> Encoded date                             : 2024-02-15 03:54:16 UTC
> Tagged date                              : 2024-02-15 03:54:16 UTC
> Color range                              : Limited
> Color primaries                          : BT.601 NTSC
> Transfer characteristics                 : BT.709
> Matrix coefficients                      : BT.601
> mdhd_Duration                            : 302037
> Codec configuration box                  : avcC
>
> Audio
> ID                                       : 2
> Format                                   : AMR
> Format/Info                              : Adaptive Multi-Rate
> Format profile                           : Narrow band
> Codec ID                                 : samr
> Duration                                 : 5 min 2 s
> Bit rate mode                            : Variable
> Bit rate                                 : 12.8 kb/s
> Channel(s)                               : 1 channel
> Sampling rate                            : 8 000 Hz
> Bit depth                                : 13 bits
> Stream size                              : 472 KiB (2%)
> Title                                    : SoundHandle
> Writing library                          :
> Language                                 : English
> Encoded date                             : 2024-02-15 03:54:16 UTC
> Tagged date                              : 2024-02-15 03:54:16 UTC
>
>
> ====
>
> ffmpeg (both 4.4.4 on Slackware 15.0 i586 and 6.1.1 on aarch64 Termux)
> refuse to copy audio stream:
>
> ffmpeg -i  /dev/shm/VID_20240215_064913.mp4 -c:a copy -c:v copy /dev/shm/ccc.mp4
> ffmpeg version 4.4.4 Copyright (c) 2000-2023 the FFmpeg developers
>    built with gcc 11.2.0 (GCC)
>    configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib
> --docdir=/usr/doc/ffmpeg-4.4.4/html --mandir=/usr/man --disable-debug
> --enable-shared --disable-static --enable-gpl --enable-version3
> --enable-avresample --arch=i586 --enable-libfontconfig
> --enable-libfreetype --enable-libfribidi --enable-gnutls
> --enable-libass --enable-libbluray --enable-libcdio --enable-frei0r
> --enable-libgsm --enable-openal --enable-libopus --enable-librtmp
> --enable-libsnappy --enable-libspeex --enable-libssh
> --enable-libtheora --enable-libtwolame --enable-libv4l2
> --enable-libvidstab --enable-libvorbis --enable-libvpx
> --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid
> --enable-libmp3lame --enable-opencl --enable-opengl
> --enable-libopenjpeg --disable-libpulse --enable-libsmbclient
> --enable-libsvtav1 --enable-libxml2 --enable-librsvg --enable-libdrm
> --enable-libaom --enable-libdav1d --enable-libsoxr --enable-libzimg
> --enable-vapoursynth
>    libavutil      56. 70.100 / 56. 70.100
>    libavcodec     58.134.100 / 58.134.100
>    libavformat    58. 76.100 / 58. 76.100
>    libavdevice    58. 13.100 / 58. 13.100
>    libavfilter     7.110.100 /  7.110.100
>    libavresample   4.  0.  0 /  4.  0.  0
>    libswscale      5.  9.100 /  5.  9.100
>    libswresample   3.  9.100 /  3.  9.100
>    libpostproc    55.  9.100 / 55.  9.100
> [amrnb @ 0x87d54c0] Multiple frames in a packet.
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/dev/shm/VID_20240215_064913.mp4':
>    Metadata:
>      major_brand     : mp42
>      minor_version   : 0
>      compatible_brands: isommp42
>      creation_time   : 2024-02-15T03:54:16.000000Z
>      com.android.version: 11
>    Duration: 00:05:02.04, start: 0.000000, bitrate: 585 kb/s
>    Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 /
> 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt709), 640x480, 562
> kb/s, SAR 1:1 DAR 4:3, 19.93 fps, 60 tbr, 90k tbn, 180k tbc (default)
>      Metadata:
>        creation_time   : 2024-02-15T03:54:16.000000Z
>        handler_name    : VideoHandle
>        vendor_id       : [0][0][0][0]
>    Stream #0:1(eng): Audio: amr_nb (samr / 0x726D6173), 8000 Hz, mono,
> flt, 12 kb/s (default)
>      Metadata:
>        creation_time   : 2024-02-15T03:54:16.000000Z
>        handler_name    : SoundHandle
>        vendor_id       : [0][0][0][0]
> [mp4 @ 0x87d9840] Could not find tag for codec amr_nb in stream #1,
> codec not currently supported in container
> Could not write header for output file #0 (incorrect codec parameters
> ?): Invalid argument
> Error initializing output stream 0:1 --
> Stream mapping:
>    Stream #0:0 -> #0:0 (copy)
>    Stream #0:1 -> #0:1 (copy)
>      Last message repeated 1 times
>
> ====
>
> well, I guess if Android somehow managed to put this into mp4 ffmpeg
> should be able to do the same trick, no?
>
The AMR audio format is not specified as a valid audio format for the 
mp4 container (see *ISO 
<https://en.wikipedia.org/wiki/International_Organization_for_Standardization>/IEC 
<https://en.wikipedia.org/wiki/International_Electrotechnical_Commission> 
14496-14:2003)*. So managing to get it in does not mean it can be played 
or transcoded by other software that conforms to the mp4 specifications.


More information about the ffmpeg-user mailing list