bond
14th June 2004, 12:53
as in MP4 all streams are "equal", no matter what codec was used to create them, its not that easy to find out which codec was used for the creation of a specific MP4 file, but its possible:
MPEG-4 ASP Video:
in AVI a so called FourCC System is used to describe the stored content (the fourcc normally tells the used encoder (unless someone changed it) and allows only specifc decoders to connect to a specific fourcc (DivX5 decoder by default connects to the DIVX/DX50 fourcc, XviD decoder to the XVID fourcc aso...))
in MP4 for storing MPEG-4 Video nothing comparable to a FourCC exists! why should it exist? all streams are MPEG-4 compliant anyways (DivX5 = MPEG-4 = XviD) so why mark them as "DIVX", "XVID" aso...? for example are MP3 audio files marked using a fourcc? allowing only specific MP3 decoders to connect to them? wouldnt make much sense, right?
therefore in MP4 all MPEG-4 (A)SP video streams are equally marked as "mp4v"
now how to find out what encoder was used?
most mpeg-4 asp encoders mark in the video bitstream (not in the container), in the so called "user data"/"bitstream description", that the stream was encoded by them
this info can be read out by the nice MPEG4VOL tool, which is part of the MPEG4IP (http://sourceforge.net/projects/mpeg4ip/) toolset (thanks to DeXT, you can download it here (http://es.geocities.com/dextstuff/). beaware the version on rarewares is outdated and will not work correctly!).
mpeg4vol is a commandline tool and therefore you have to feed it with the following commandline (copy it to a .txt file, place it in the same folder as mpeg4vol.exe, rename the .txt to .bat and execute it):
mpeg4vol.exe "c:\path to\file.mp4"it will now display a whole bunch of infos about the video stream and at the end under "user data" hopefully one of the following known descriptions indicating the used encoder (they dont have to be 100% the same):
XviD: XviD0029 ("DivX999b000p" indicates packed bitstream, "C" cartoon mode)
DivX5: DivX503b1031 ("p" indicates packed bitstream has been used)
ffmpeg/ffvfw/ffdshow: FFmpeg0.4.8b4684
3ivx: 3ivx@—
NeroDigital: em4v 4.1.4.14
Quicktime/Sorenson/DivX4: these MPEG-4 encoders dont seem to set a bitstream info
as alternative to mpeg4vol you can also extract the video stream to AVI with your favourite tool and than analyse it with the nice DRF Analyser (http://www.geocities.com/analyzerDRF/) tool via Analyse DivX -> View Report
dont look at "FourCC" cause it most likely will not be the correct one, have a look at "Codec", which shows the bitstream description on the bitstream level (DRF Analyser simply displays the used FourCC again (like DIVX, which doesnt mean that DivX5 was used of course) if no bitstream info has been set (like with Quicktime/Sorenson/DivX4 streams))
MPEG-4 AAC Audio:
to my knowledge the current AAC encoders dont set an user data comparable to the video codecs, or at least no tool exists to read it out, but its possible already to identify nero and faac encoded streams:
open up the MP4 containing the nero/faac aac track in the foobar (http://www.foobar2000.org/) audio player, right click -> properties -> technical info
on files encoded with newer versions of faac/nero there will be displayed which version was used to encode the stream. with files outputted by other encoders nothing will be displayed
this is not a good solution, i know, and it also seems that this info gets lost if you export to .aac and transmux to another .mp4 :(
MP3 Audio
as its the case for AAC audio there also is no 100% correct method to get to know what codec was used to encode a MP3 stream, but there is a smart tool existing which is able to detect the encoder most of the time correctly: EncSpot (http://www.guerillasoft.nstemp.com/EncSpot2/)
it is really a must have tool for every MP3 freak :)
MPEG-4 ASP Video:
in AVI a so called FourCC System is used to describe the stored content (the fourcc normally tells the used encoder (unless someone changed it) and allows only specifc decoders to connect to a specific fourcc (DivX5 decoder by default connects to the DIVX/DX50 fourcc, XviD decoder to the XVID fourcc aso...))
in MP4 for storing MPEG-4 Video nothing comparable to a FourCC exists! why should it exist? all streams are MPEG-4 compliant anyways (DivX5 = MPEG-4 = XviD) so why mark them as "DIVX", "XVID" aso...? for example are MP3 audio files marked using a fourcc? allowing only specific MP3 decoders to connect to them? wouldnt make much sense, right?
therefore in MP4 all MPEG-4 (A)SP video streams are equally marked as "mp4v"
now how to find out what encoder was used?
most mpeg-4 asp encoders mark in the video bitstream (not in the container), in the so called "user data"/"bitstream description", that the stream was encoded by them
this info can be read out by the nice MPEG4VOL tool, which is part of the MPEG4IP (http://sourceforge.net/projects/mpeg4ip/) toolset (thanks to DeXT, you can download it here (http://es.geocities.com/dextstuff/). beaware the version on rarewares is outdated and will not work correctly!).
mpeg4vol is a commandline tool and therefore you have to feed it with the following commandline (copy it to a .txt file, place it in the same folder as mpeg4vol.exe, rename the .txt to .bat and execute it):
mpeg4vol.exe "c:\path to\file.mp4"it will now display a whole bunch of infos about the video stream and at the end under "user data" hopefully one of the following known descriptions indicating the used encoder (they dont have to be 100% the same):
XviD: XviD0029 ("DivX999b000p" indicates packed bitstream, "C" cartoon mode)
DivX5: DivX503b1031 ("p" indicates packed bitstream has been used)
ffmpeg/ffvfw/ffdshow: FFmpeg0.4.8b4684
3ivx: 3ivx@—
NeroDigital: em4v 4.1.4.14
Quicktime/Sorenson/DivX4: these MPEG-4 encoders dont seem to set a bitstream info
as alternative to mpeg4vol you can also extract the video stream to AVI with your favourite tool and than analyse it with the nice DRF Analyser (http://www.geocities.com/analyzerDRF/) tool via Analyse DivX -> View Report
dont look at "FourCC" cause it most likely will not be the correct one, have a look at "Codec", which shows the bitstream description on the bitstream level (DRF Analyser simply displays the used FourCC again (like DIVX, which doesnt mean that DivX5 was used of course) if no bitstream info has been set (like with Quicktime/Sorenson/DivX4 streams))
MPEG-4 AAC Audio:
to my knowledge the current AAC encoders dont set an user data comparable to the video codecs, or at least no tool exists to read it out, but its possible already to identify nero and faac encoded streams:
open up the MP4 containing the nero/faac aac track in the foobar (http://www.foobar2000.org/) audio player, right click -> properties -> technical info
on files encoded with newer versions of faac/nero there will be displayed which version was used to encode the stream. with files outputted by other encoders nothing will be displayed
this is not a good solution, i know, and it also seems that this info gets lost if you export to .aac and transmux to another .mp4 :(
MP3 Audio
as its the case for AAC audio there also is no 100% correct method to get to know what codec was used to encode a MP3 stream, but there is a smart tool existing which is able to detect the encoder most of the time correctly: EncSpot (http://www.guerillasoft.nstemp.com/EncSpot2/)
it is really a must have tool for every MP3 freak :)