Jellyfin uses only ISO 639-2 language codes
to translate the metadata tag eng
to English
for the track selector.
For some languages multiple such tags exist, for example Germany has ger
and deu
.
Here only the tag deu
is correctly translated to German
whilst ger
remains unrecognized.
mkvmerge
always replaces the language codes with the matroska specified set of langauge codes,
which sadly are the wrong ones for Jellyfin.
As an end user one can use ffmpeg to rewrite the metadata language tags to the correct set for Jellyfin.
For this I went to Wikipedias list of language codes and developed the following javascript line to create ffmpeg metadata mappings
[...document.querySelectorAll("#Table > tbody > tr")]
.map(tr => [tr.children[2].textContent, tr.children[3].textContent])
.filter(c => c[0] !== c[1])
.map(c => `-metadata:s:m:language:${c[1]} language=${c[0]}`)
.join(" ")
which results in this long line of text:
-metadata:s:m:language:alb language=sqi -metadata:s:m:language:arm language=hye -metadata:s:m:language:baq language=eus -metadata:s:m:language:bur language=mya -metadata:s:m:language:chi language=zho -metadata:s:m:language:cze language=ces -metadata:s:m:language:dut language=nld -metadata:s:m:language:fre language=fra -metadata:s:m:language:geo language=kat -metadata:s:m:language:ger language=deu -metadata:s:m:language:gre language=ell -metadata:s:m:language:ice language=isl -metadata:s:m:language:mac language=mkd -metadata:s:m:language:may language=msa -metadata:s:m:language:mao language=mri -metadata:s:m:language:per language=fas -metadata:s:m:language:rum language=ron -metadata:s:m:language:slo language=slk -metadata:s:m:language:tib language=bod -metadata:s:m:language:wel language=cym
(and the same for 2
-digit long language codes)
we can now use it in an ffmpeg command to rewrite the metadata tags like this:
ffmpegfixjellyfinlanguagecodes() {
ffmpeg \
-hide_banner \
-nostdin \
-v error \
-xerror \
-i "$1" \
-map 0 \
-c copy \
-disposition +0 \
-metadata:s:m:language:alb language=sqi \
-metadata:s:m:language:arm language=hye \
-metadata:s:m:language:baq language=eus \
-metadata:s:m:language:bur language=mya \
-metadata:s:m:language:chi language=zho \
-metadata:s:m:language:cze language=ces \
-metadata:s:m:language:dut language=nld \
-metadata:s:m:language:fre language=fra \
-metadata:s:m:language:geo language=kat \
-metadata:s:m:language:ger language=deu \
-metadata:s:m:language:gre language=ell \
-metadata:s:m:language:ice language=isl \
-metadata:s:m:language:mac language=mkd \
-metadata:s:m:language:may language=msa \
-metadata:s:m:language:mao language=mri \
-metadata:s:m:language:per language=fas \
-metadata:s:m:language:rum language=ron \
-metadata:s:m:language:slo language=slk \
-metadata:s:m:language:tib language=bod \
-metadata:s:m:language:wel language=cym \
-metadata:s:m:language:ab language=abk \
-metadata:s:m:language:aa language=aar \
-metadata:s:m:language:af language=afr \
-metadata:s:m:language:ak language=aka \
-metadata:s:m:language:sq language=sqi \
-metadata:s:m:language:am language=amh \
-metadata:s:m:language:ar language=ara \
-metadata:s:m:language:an language=arg \
-metadata:s:m:language:hy language=hye \
-metadata:s:m:language:as language=asm \
-metadata:s:m:language:av language=ava \
-metadata:s:m:language:ae language=ave \
-metadata:s:m:language:ay language=aym \
-metadata:s:m:language:az language=aze \
-metadata:s:m:language:bm language=bam \
-metadata:s:m:language:ba language=bak \
-metadata:s:m:language:eu language=eus \
-metadata:s:m:language:be language=bel \
-metadata:s:m:language:bn language=ben \
-metadata:s:m:language:bi language=bis \
-metadata:s:m:language:bs language=bos \
-metadata:s:m:language:br language=bre \
-metadata:s:m:language:bg language=bul \
-metadata:s:m:language:my language=mya \
-metadata:s:m:language:ca language=cat \
-metadata:s:m:language:ch language=cha \
-metadata:s:m:language:ce language=che \
-metadata:s:m:language:ny language=nya \
-metadata:s:m:language:zh language=zho \
-metadata:s:m:language:cu language=chu \
-metadata:s:m:language:cv language=chv \
-metadata:s:m:language:kw language=cor \
-metadata:s:m:language:co language=cos \
-metadata:s:m:language:cr language=cre \
-metadata:s:m:language:hr language=hrv \
-metadata:s:m:language:cs language=ces \
-metadata:s:m:language:da language=dan \
-metadata:s:m:language:dv language=div \
-metadata:s:m:language:nl language=nld \
-metadata:s:m:language:dz language=dzo \
-metadata:s:m:language:en language=eng \
-metadata:s:m:language:eo language=epo \
-metadata:s:m:language:et language=est \
-metadata:s:m:language:ee language=ewe \
-metadata:s:m:language:fo language=fao \
-metadata:s:m:language:fj language=fij \
-metadata:s:m:language:fi language=fin \
-metadata:s:m:language:fr language=fra \
-metadata:s:m:language:fy language=fry \
-metadata:s:m:language:ff language=ful \
-metadata:s:m:language:gd language=gla \
-metadata:s:m:language:gl language=glg \
-metadata:s:m:language:lg language=lug \
-metadata:s:m:language:ka language=kat \
-metadata:s:m:language:de language=deu \
-metadata:s:m:language:el language=ell \
-metadata:s:m:language:kl language=kal \
-metadata:s:m:language:gn language=grn \
-metadata:s:m:language:gu language=guj \
-metadata:s:m:language:ht language=hat \
-metadata:s:m:language:ha language=hau \
-metadata:s:m:language:he language=heb \
-metadata:s:m:language:hz language=her \
-metadata:s:m:language:hi language=hin \
-metadata:s:m:language:ho language=hmo \
-metadata:s:m:language:hu language=hun \
-metadata:s:m:language:is language=isl \
-metadata:s:m:language:io language=ido \
-metadata:s:m:language:ig language=ibo \
-metadata:s:m:language:id language=ind \
-metadata:s:m:language:ia language=ina \
-metadata:s:m:language:ie language=ile \
-metadata:s:m:language:iu language=iku \
-metadata:s:m:language:ik language=ipk \
-metadata:s:m:language:ga language=gle \
-metadata:s:m:language:it language=ita \
-metadata:s:m:language:ja language=jpn \
-metadata:s:m:language:jv language=jav \
-metadata:s:m:language:kn language=kan \
-metadata:s:m:language:kr language=kau \
-metadata:s:m:language:ks language=kas \
-metadata:s:m:language:kk language=kaz \
-metadata:s:m:language:km language=khm \
-metadata:s:m:language:ki language=kik \
-metadata:s:m:language:rw language=kin \
-metadata:s:m:language:ky language=kir \
-metadata:s:m:language:kv language=kom \
-metadata:s:m:language:kg language=kon \
-metadata:s:m:language:ko language=kor \
-metadata:s:m:language:kj language=kua \
-metadata:s:m:language:ku language=kur \
-metadata:s:m:language:lo language=lao \
-metadata:s:m:language:la language=lat \
-metadata:s:m:language:lv language=lav \
-metadata:s:m:language:li language=lim \
-metadata:s:m:language:ln language=lin \
-metadata:s:m:language:lt language=lit \
-metadata:s:m:language:lu language=lub \
-metadata:s:m:language:lb language=ltz \
-metadata:s:m:language:mk language=mkd \
-metadata:s:m:language:mg language=mlg \
-metadata:s:m:language:ms language=msa \
-metadata:s:m:language:ml language=mal \
-metadata:s:m:language:mt language=mlt \
-metadata:s:m:language:gv language=glv \
-metadata:s:m:language:mi language=mri \
-metadata:s:m:language:mr language=mar \
-metadata:s:m:language:mh language=mah \
-metadata:s:m:language:mn language=mon \
-metadata:s:m:language:na language=nau \
-metadata:s:m:language:nv language=nav \
-metadata:s:m:language:nd language=nde \
-metadata:s:m:language:nr language=nbl \
-metadata:s:m:language:ng language=ndo \
-metadata:s:m:language:ne language=nep \
-metadata:s:m:language:no language=nor \
-metadata:s:m:language:nb language=nob \
-metadata:s:m:language:nn language=nno \
-metadata:s:m:language:oc language=oci \
-metadata:s:m:language:oj language=oji \
-metadata:s:m:language:or language=ori \
-metadata:s:m:language:om language=orm \
-metadata:s:m:language:os language=oss \
-metadata:s:m:language:pi language=pli \
-metadata:s:m:language:ps language=pus \
-metadata:s:m:language:fa language=fas \
-metadata:s:m:language:pl language=pol \
-metadata:s:m:language:pt language=por \
-metadata:s:m:language:pa language=pan \
-metadata:s:m:language:qu language=que \
-metadata:s:m:language:ro language=ron \
-metadata:s:m:language:rm language=roh \
-metadata:s:m:language:rn language=run \
-metadata:s:m:language:ru language=rus \
-metadata:s:m:language:se language=sme \
-metadata:s:m:language:sm language=smo \
-metadata:s:m:language:sg language=sag \
-metadata:s:m:language:sa language=san \
-metadata:s:m:language:sc language=srd \
-metadata:s:m:language:sr language=srp \
-metadata:s:m:language:sn language=sna \
-metadata:s:m:language:sd language=snd \
-metadata:s:m:language:si language=sin \
-metadata:s:m:language:sk language=slk \
-metadata:s:m:language:sl language=slv \
-metadata:s:m:language:so language=som \
-metadata:s:m:language:st language=sot \
-metadata:s:m:language:es language=spa \
-metadata:s:m:language:su language=sun \
-metadata:s:m:language:sw language=swa \
-metadata:s:m:language:ss language=ssw \
-metadata:s:m:language:sv language=swe \
-metadata:s:m:language:tl language=tgl \
-metadata:s:m:language:ty language=tah \
-metadata:s:m:language:tg language=tgk \
-metadata:s:m:language:ta language=tam \
-metadata:s:m:language:tt language=tat \
-metadata:s:m:language:te language=tel \
-metadata:s:m:language:th language=tha \
-metadata:s:m:language:bo language=bod \
-metadata:s:m:language:ti language=tir \
-metadata:s:m:language:to language=ton \
-metadata:s:m:language:ts language=tso \
-metadata:s:m:language:tn language=tsn \
-metadata:s:m:language:tr language=tur \
-metadata:s:m:language:tk language=tuk \
-metadata:s:m:language:tw language=twi \
-metadata:s:m:language:ug language=uig \
-metadata:s:m:language:uk language=ukr \
-metadata:s:m:language:ur language=urd \
-metadata:s:m:language:uz language=uzb \
-metadata:s:m:language:ve language=ven \
-metadata:s:m:language:vi language=vie \
-metadata:s:m:language:vo language=vol \
-metadata:s:m:language:wa language=wln \
-metadata:s:m:language:cy language=cym \
-metadata:s:m:language:wo language=wol \
-metadata:s:m:language:xh language=xho \
-metadata:s:m:language:ii language=iii \
-metadata:s:m:language:yi language=yid \
-metadata:s:m:language:yo language=yor \
-metadata:s:m:language:za language=zha \
-metadata:s:m:language:zu language=zul \
"${1%.*}-fixedlanguagecodes.${1##*.}"
}
After running this command on the video files, all language tags will correctly be recognized by Jellyfin.