Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save alfonmga/bd276b1d5e4e5ab4a88f9fe57b65eeee to your computer and use it in GitHub Desktop.
Save alfonmga/bd276b1d5e4e5ab4a88f9fe57b65eeee to your computer and use it in GitHub Desktop.
FFMPEG - map of formats to default mime types
// INCOMPLETE
// This command will give you list of available FFMPEG formats and their default Mime types
// ffmpeg -formats -hide_banner | tail -n +5 | cut -c5- | cut -d' ' -f1 | xargs -i{} ffmpeg -hide_banner -h demuxer={} | pcregrep -o2 -o4 -M '(Muxer (\w+) )|(Mime type:( .*).)'
// And then parse the output with regex to JSON format in JavaScript for example:
// str.match(/(.*)\n (.*)/gm).map(m => `"${m.replace(/\n /, '": "')}"`).join(',\n');
// Combine the output with MDN - Common MIME types
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
// And with IANA:
// https://www.iana.org/assignments/media-types/media-types.xhtml#video
// + couple of manual updates
const format2mime = {
"3dostr" : "application/vnd.pg.format",
"3g2" : "video/3gpp2",
"3gp" : "video/3gpp",
"4xm" : "audio/x-adpcm",
"a64" : "application/octet-stream ",
"aa" : "application/octet-stream",
"aac" : "audio/aac",
"ac3" : "audio/x-ac3",
"acm" : "application/octet-stream",
"act" : "",
"adf" : "",
"adp" : "",
"ads" : "",
"adts" : "audio/aac",
"adx" : "",
"aea" : "",
"afc" : "",
"aiff" : "audio/aiff",
"aix" : "",
"alaw" : "",
"alias_pix" : "",
"alsa" : "",
"amr" : "audio/amr",
"anm" : "",
"apc" : "",
"ape" : "",
"apng" : "image/png",
"aqtitle" : "",
"asf" : "video/x-ms-asf",
"asf_o" : "",
"asf_stream" : "video/x-ms-asf",
"ass" : "text/x-ass",
"ast" : "",
"au" : "audio/basic",
"avi" : "video/x-msvideo",
"avisynth" : "",
"avm2" : "application/x-shockwave-flash",
"avr" : "",
"avs" : "",
"bethsoftvid" : "",
"bfi" : "",
"bfstm" : "",
"bin" : "application/octet-stream",
"bink" : "",
"bit" : "audio/bit",
"bmp_pipe" : "",
"bmv" : "",
"boa" : "",
"brender_pix" : "",
"brstm" : "",
"c93" : "",
"caca" : "",
"caf" : "audio/x-caf",
"cavsvideo" : "",
"cdg" : "",
"cdxl" : "",
"chromaprint" : "",
"cine" : "",
"concat" : "",
"crc" : "",
"dash" : "",
"data" : "",
"daud" : "",
"dcstr" : "",
"dds_pipe" : "",
"dfa" : "",
"dirac" : "",
"dnxhd" : "",
"dpx_pipe" : "",
"dsf" : "",
"dsicin" : "",
"dss" : "",
"dts" : "audio/x-dca",
"dtshd" : "",
"dv" : "",
"dvbsub" : "",
"dvbtxt" : "",
"dvd" : "video/mpeg",
"dxa" : "",
"ea" : "",
"ea_cdata" : "",
"eac3" : "audio/x-eac3",
"epaf" : "",
"exr_pipe" : "",
"f32be" : "",
"f32le" : "",
"f4v" : "application/f4v",
"f64be" : "",
"f64le" : "",
"fbdev" : "",
"ffm" : "",
"ffmetadata" : "",
"fifo" : "",
"film_cpk" : "",
"filmstrip" : "",
"fits" : "",
"flac" : "audio/x-flac",
"flic" : "",
"flv" : "video/x-flv",
"framecrc" : "",
"framehash" : "",
"framemd5" : "",
"frm" : "",
"fsb" : "",
"g722" : "audio/G722",
"g723_1" : "audio/g723",
"g726" : "",
"g726le" : "",
"g729" : "",
"gdv" : "",
"genh" : "",
"gif" : "image/gif",
"gsm" : "audio/x-gsm",
"gxf" : "",
"h261" : "video/x-h261",
"h263" : "video/x-h263",
"h264" : "",
"hash" : "",
"hds" : "",
"hevc" : "",
"hls" : "application/x-mpegURL",
"hls,applehttp" : "application/x-mpegURL",
"hnm" : "",
"ico" : "image/vnd.microsoft.icon",
"idcin" : "",
"idf" : "",
"iec61883" : "",
"iff" : "",
"ilbc" : "audio/iLBC",
"image2" : "",
"image2pipe" : "",
"ingenient" : "",
"ipmovie" : "",
"ipod" : "video/mp4",
"ircam" : "",
"ismv" : "video/mp4",
"iss" : "",
"iv8" : "",
"ivf" : "",
"ivr" : "",
"j2k_pipe" : "",
"jack" : "",
"jacosub" : "text/x-jacosub",
"jpeg_pipe" : "image/jpeg",
"jpegls_pipe" : "image/jpeg",
"jv" : "",
"kmsgrab" : "",
"latm" : "audio/MP4A-LATM",
"lavfi" : "",
"libcdio" : "",
"libdc1394" : "",
"libgme" : "",
"libopenmpt" : "",
"live_flv" : "video/x-flv",
"lmlm4" : "",
"loas" : "",
"lrc" : "",
"lvf" : "",
"lxf" : "",
"m4v" : "video/x-m4v",
"matroska" : "video/x-matroska",
"matroska,webm" : "video/webm",
"md5" : "",
"mgsts" : "",
"microdvd" : "text/x-microdvd",
"mjpeg" : "video/x-mjpeg",
"mjpeg_2000" : "video/x-mjpeg",
"mkvtimestamp_v2" : "",
"mlp" : "",
"mlv" : "",
"mm" : "",
"mmf" : "application/vnd.smaf",
"mov" : "",
"mov,mp4,m4a,3gp,3g2,mj2" : "video/mp4",
"mp2" : "audio/mpeg",
"mp3" : "audio/mpeg",
"mp4" : "video/mp4",
"mpc" : "",
"mpc8" : "",
"mpeg" : "video/mpeg",
"mpeg1video" : "video/mpeg",
"mpeg2video" : "video/mpeg",
"mpegts" : "video/MP2T",
"mpegtsraw" : "video/MP2T",
"mpegvideo" : "video/mpeg",
"mpjpeg" : "multipart/x-mixed-replace;boundary=ffserver",
"mpl2" : "",
"mpsub" : "",
"msf" : "",
"msnwctcp" : "",
"mtaf" : "",
"mtv" : "",
"mulaw" : "",
"musx" : "",
"mv" : "",
"mvi" : "",
"mxf" : "application/mxf",
"mxf_d10" : "application/mxf",
"mxf_opatom" : "application/mxf",
"mxg" : "",
"nc" : "",
"nistsphere" : "",
"nsv" : "",
"null" : "",
"nut" : "video/x-nut",
"nuv" : "",
"oga" : "audio/ogg",
"ogg" : "application/ogg",
"ogv" : "video/ogg",
"oma" : "audio/x-oma",
"openal" : "",
"opengl" : "",
"opus" : "audio/ogg",
"oss" : "",
"paf" : "",
"pam_pipe" : "",
"pbm_pipe" : "",
"pcx_pipe" : "",
"pgm_pipe" : "",
"pgmyuv_pipe" : "",
"pictor_pipe" : "",
"pjs" : "",
"pmp" : "",
"png_pipe" : "",
"ppm_pipe" : "",
"psd_pipe" : "",
"psp" : "",
"psxstr" : "",
"pulse" : "",
"pva" : "",
"pvf" : "",
"qcp" : "",
"qdraw_pipe" : "",
"r3d" : "",
"rawvideo" : "",
"realtext" : "",
"redspark" : "",
"rl2" : "",
"rm" : "application/vnd.rn-realmedia",
"roq" : "",
"rpl" : "",
"rsd" : "",
"rso" : "",
"rtp" : "",
"rtp_mpegts" : "",
"rtsp" : "",
"s16be" : "",
"s16le" : "",
"s24be" : "",
"s24le" : "",
"s32be" : "",
"s32le" : "",
"s337m" : "",
"s8" : "",
"sami" : "",
"sap" : "",
"sbg" : "",
"scc" : "",
"sdl,sdl2" : "",
"sdp" : "",
"sdr2" : "",
"sds" : "",
"sdx" : "",
"segment" : "",
"sgi_pipe" : "",
"shn" : "",
"siff" : "",
"singlejpeg" : "image/jpeg",
"sln" : "",
"smjpeg" : "image/jpeg",
"smk" : "",
"smoothstreaming" : "",
"smush" : "",
"sndio" : "",
"sol" : "",
"sox" : "",
"spdif" : "",
"spx" : "audio/ogg",
"srt" : "application/x-subrip",
"stl" : "",
"stream_segment,ssegment" : "",
"subviewer" : "",
"subviewer1" : "",
"sunrast_pipe" : "",
"sup" : "application/x-pgs",
"svag" : "",
"svcd" : "video/mpeg",
"svg_pipe" : "",
"swf" : "application/x-shockwave-flash",
"tak" : "",
"tedcaptions" : "",
"tee" : "",
"thp" : "",
"tiertexseq" : "",
"tiff_pipe" : "",
"tmv" : "",
"truehd" : "",
"tta" : "audio/x-tta",
"tty" : "",
"txd" : "",
"u16be" : "",
"u16le" : "",
"u24be" : "",
"u24le" : "",
"u32be" : "",
"u32le" : "",
"u8" : "",
"uncodedframecrc" : "",
"v210" : "",
"v210x" : "",
"v4l2" : "",
"vag" : "",
"vc1" : "",
"vc1test" : "",
"vcd" : "video/mpeg",
"video4linux2,v4l2" : "",
"vivo" : "",
"vmd" : "",
"vob" : "video/mpeg",
"vobsub" : "",
"voc" : "audio/x-voc",
"vpk" : "",
"vplayer" : "",
"vqf" : "",
"w64" : "",
"wav" : "audio/x-wav",
"wc3movie" : "",
"webm" : "video/webm",
"webm_chunk" : "video/webm",
"webm_dash_manifest" : "application/xml",
"webp" : "image/webp",
"webp_pipe" : "",
"webvtt" : "text/vtt",
"wsaud" : "",
"wsd" : "",
"wsvqa" : "",
"wtv" : "",
"wv" : "audio/x-wavpack",
"wve" : "",
"x11grab" : "",
"xa" : "",
"xbin" : "",
"xmv" : "",
"xpm_pipe" : "",
"xv" : "",
"xvag" : "",
"xwma" : "",
"yop" : ""
};
// use this to filter out empty keys:
Object.fromEntries = arr => Object.assign({}, ...Array.from(arr, ([k, v]) => ({[k]: v}) ));
Object.fromEntries( Object.keys(format2mime).filter(k => format2mime[k]).map(k => [k, format2mime[k]]) )
{
"3dostr" : "application/vnd.pg.format",
"3g2" : "video/3gpp2",
"3gp" : "video/3gpp",
"4xm" : "audio/x-adpcm",
"a64" : "application/octet-stream ",
"aa" : "application/octet-stream",
"aac" : "audio/aac",
"ac3" : "audio/x-ac3",
"acm" : "application/octet-stream",
"adts" : "audio/aac",
"aiff" : "audio/aiff",
"amr" : "audio/amr",
"apng" : "image/png",
"asf" : "video/x-ms-asf",
"asf_stream" : "video/x-ms-asf",
"ass" : "text/x-ass",
"au" : "audio/basic",
"avi" : "video/x-msvideo",
"avm2" : "application/x-shockwave-flash",
"bin" : "application/octet-stream",
"bit" : "audio/bit",
"caf" : "audio/x-caf",
"dts" : "audio/x-dca",
"dvd" : "video/mpeg",
"eac3" : "audio/x-eac3",
"f4v" : "application/f4v",
"flac" : "audio/x-flac",
"flv" : "video/x-flv",
"g722" : "audio/G722",
"g723_1" : "audio/g723",
"gif" : "image/gif",
"gsm" : "audio/x-gsm",
"h261" : "video/x-h261",
"h263" : "video/x-h263",
"hls" : "application/x-mpegURL",
"hls,applehttp" : "application/x-mpegURL",
"ico" : "image/vnd.microsoft.icon",
"ilbc" : "audio/iLBC",
"ipod" : "video/mp4",
"ismv" : "video/mp4",
"jacosub" : "text/x-jacosub",
"jpeg_pipe" : "image/jpeg",
"jpegls_pipe" : "image/jpeg",
"latm" : "audio/MP4A-LATM",
"live_flv" : "video/x-flv",
"m4v" : "video/x-m4v",
"matroska" : "video/x-matroska",
"matroska,webm" : "video/webm",
"microdvd" : "text/x-microdvd",
"mjpeg" : "video/x-mjpeg",
"mjpeg_2000" : "video/x-mjpeg",
"mmf" : "application/vnd.smaf",
"mov,mp4,m4a,3gp,3g2,mj2" : "video/mp4",
"mp2" : "audio/mpeg",
"mp3" : "audio/mpeg",
"mp4" : "video/mp4",
"mpeg" : "video/mpeg",
"mpeg1video" : "video/mpeg",
"mpeg2video" : "video/mpeg",
"mpegts" : "video/MP2T",
"mpegtsraw" : "video/MP2T",
"mpegvideo" : "video/mpeg",
"mpjpeg" : "multipart/x-mixed-replace;boundary=ffserver",
"mxf" : "application/mxf",
"mxf_d10" : "application/mxf",
"mxf_opatom" : "application/mxf",
"nut" : "video/x-nut",
"oga" : "audio/ogg",
"ogg" : "application/ogg",
"ogv" : "video/ogg",
"oma" : "audio/x-oma",
"opus" : "audio/ogg",
"rm" : "application/vnd.rn-realmedia",
"singlejpeg" : "image/jpeg",
"smjpeg" : "image/jpeg",
"spx" : "audio/ogg",
"srt" : "application/x-subrip",
"sup" : "application/x-pgs",
"svcd" : "video/mpeg",
"swf" : "application/x-shockwave-flash",
"tta" : "audio/x-tta",
"vcd" : "video/mpeg",
"vob" : "video/mpeg",
"voc" : "audio/x-voc",
"wav" : "audio/x-wav",
"webm" : "video/webm",
"webm_chunk" : "video/webm",
"webm_dash_manifest" : "application/xml",
"webp" : "image/webp",
"webvtt" : "text/vtt",
"wv" : "audio/x-wavpack"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment