[FFmpeg-user] MOV: "undetermined" as audio track language writes "eng"
Peter B.
pb at das-werkstatt.com
Fri Nov 9 14:18:09 EET 2018
Hi everyone :)
I have a situation where I would need to encode Quicktime (MOV) files
with ISO639-2 language metadata values "less popular/common" than
usual. I've also read the related the Quicktime Specs [1,2].
How can I set language to e.g. UND or QAA?
Whenever I try to encode a file e.g. with the language tracks "UND"
(=undetermined) or "QAA" (=reserved for local use), the value written to
the file is "ENG".
Both "und" and "qaa" are proper ISO639-2 codes [3].
In order to rule out syntax issues, I've tried with "ger" (=German) and
"fra" (=French): Both work flawlessly.
I've seen in "libavformat/isom.c" [4], and there's a hardcoded list of
ISO639 codes, but says:
/* deprecated by putting the code as 3*5 bits ASCII */
Sounded to me like this list-limitation is superseded
by"ff_mov_iso639_to_lang", but how do I trigger it to be used?
Grateful for any help :)
Thanks in advance,
Peter B.
Here's commandline and complete, uncut console output to reproduce it:
// ------------------------------
$ ffmpeg -y -f lavfi -i "sine=frequency=1000:duration=1" -c:a pcm_s16le
-metadata:s:a:0 language=qaa delme.mov
// ------------------------------
ffmpeg version N-92314-g323c2cf Copyright (c) 2000-2018 the FFmpeg
developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
configuration: --prefix=/usr/local --enable-gpl --enable-nonfree
--enable-version3 --enable-postproc --enable-ffplay --enable-swscale
--enable-avfilter --enable-pthreads --enable-bzlib --enable-zlib
--enable-decoder=png --enable-encoder=png --samples=../fate-suite
--enable-libfreetype --enable-libopenjpeg --disable-decoder=jpeg2000
--enable-libvpx --enable-libvorbis --enable-libx264 --enable-libx265
libavutil 56. 21.100 / 56. 21.100
libavcodec 58. 34.100 / 58. 34.100
libavformat 58. 19.102 / 58. 19.102
libavdevice 58. 4.106 / 58. 4.106
libavfilter 7. 39.100 / 7. 39.100
libswscale 5. 2.100 / 5. 2.100
libswresample 3. 2.100 / 3. 2.100
libpostproc 55. 2.100 / 55. 2.100
Input #0, lavfi, from 'sine=frequency=1000:duration=1':
Duration: N/A, start: 0.000000, bitrate: 705 kb/s
Stream #0:0: Audio: pcm_s16le, 44100 Hz, mono, s16, 705 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, mov, to 'delme.mov':
Metadata:
encoder : Lavf58.19.102
Stream #0:0(qaa): Audio: pcm_s16le (sowt / 0x74776F73), 44100 Hz,
mono, s16, 705 kb/s
Metadata:
encoder : Lavc58.34.100 pcm_s16le
[Parsed_sine_0 @ 0x2a09580] EOF timestamp not reliable
size= 87kB time=00:00:01.00 bitrate= 711.1kbits/s speed= 304x
video:0kB audio:86kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 0.777778%
// ------------------------------
$ ffprobe-git -loglevel quiet -show_entries
stream=index,codec_name,codec_type:stream_tags=language -i delme.mov
// ------------------------------
[STREAM]
index=0
codec_name=pcm_s16le
codec_type=audio
TAG:language=eng
[/STREAM]
// ------------------------------
$ ffmpeg-git -y -f lavfi -i "sine=frequency=1000:duration=1" -c:a
pcm_s16le -metadata:s:a:0 language=ger delme.mov
// ------------------------------
ffmpeg version N-92314-g323c2cf Copyright (c) 2000-2018 the FFmpeg
developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
configuration: --prefix=/usr/local --enable-gpl --enable-nonfree
--enable-version3 --enable-postproc --enable-ffplay --enable-swscale
--enable-avfilter --enable-pthreads --enable-bzlib --enable-zlib
--enable-decoder=png --enable-encoder=png --samples=../fate-suite
--enable-libfreetype --enable-libopenjpeg --disable-decoder=jpeg2000
--enable-libvpx --enable-libvorbis --enable-libx264 --enable-libx265
libavutil 56. 21.100 / 56. 21.100
libavcodec 58. 34.100 / 58. 34.100
libavformat 58. 19.102 / 58. 19.102
libavdevice 58. 4.106 / 58. 4.106
libavfilter 7. 39.100 / 7. 39.100
libswscale 5. 2.100 / 5. 2.100
libswresample 3. 2.100 / 3. 2.100
libpostproc 55. 2.100 / 55. 2.100
Input #0, lavfi, from 'sine=frequency=1000:duration=1':
Duration: N/A, start: 0.000000, bitrate: 705 kb/s
Stream #0:0: Audio: pcm_s16le, 44100 Hz, mono, s16, 705 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, mov, to 'delme.mov':
Metadata:
encoder : Lavf58.19.102
Stream #0:0(ger): Audio: pcm_s16le (sowt / 0x74776F73), 44100 Hz,
mono, s16, 705 kb/s
Metadata:
encoder : Lavc58.34.100 pcm_s16le
[Parsed_sine_0 @ 0x2998580] EOF timestamp not reliable
size= 87kB time=00:00:01.00 bitrate= 711.1kbits/s speed= 357x
video:0kB audio:86kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 0.777778%
// ------------------------------
$ ffprobe -loglevel quiet -show_entries
stream=index,codec_name,codec_type:stream_tags=language -i delme.mov
// ------------------------------
[STREAM]
index=0
codec_name=pcm_s16le
codec_type=audio
TAG:language=ger
[/STREAM]
== References:
[1]
https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html
[2]
https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap4/qtff4.html#//apple_ref/doc/uid/TP40000939-CH206-35103
[3] https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
[4] https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/isom.c
More information about the ffmpeg-user
mailing list