The Media Foundation H264 Encoder MFT documentation does not mention a CLSID for the encoder. Other Encoder class IDs, and the H264 Decoder MFT class ID are defined at
\Program Files (x86)\Microsoft SDKs\7.1\Include\wmcodecdsp.h or
\Program Files (x86)\Windows Kits\8.x\Include\am\wmcodecdsp.h
I see this codec when I enumerate the devices, and can obtain the CLSID, which is {6ca50344-051a-4ded-9779-a43305165e35}, from the enumerated list, but I cannot find a named GUID, which I would expect to be something like: CLSID_CH264MediaEncObject
I would like to use the GUID (rather than the enumerated name) to make decisions when building my topology based on which encoder the user has selected. I can define_guid this, but it just seems odd.
So:
Why is there not a named guid for the H264 Encoder MFT?
This looks intentional as Media Foundation API suggests that you let the API choose appropriate encoder for you. Your role there is to build a suitable profile and let transcoding API to create the topology using requested parameters.
I suppose you know the MSDN leads, but for the record: Tutorial: Encoding an MP4 File - Create the Transcode Profile.
In particular, they seem to want to retain control over encoder choice in order to use hardware encoder automatically where applicable:
Certified Hardware Encoder
If a certified hardware encoder is present, it will generally be used instead of the inbox system encoder for Media Foundation related scenarios.
One of the problems with compressors in DirectShow was the common list and competition between compressors. For many reasons, an application would rather hardcode specific compressor rather than use the best choice for given format. Here in MF the approach is different: a profile defines what you want to eventually get on the output, then API takes responsibility to supply the encoder.
On Windows SDK 8.1, the name is CLSID_CMSH264EncoderMFT (wmcodecdsp.h).