[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