Mux Audio and Video Into MP4¶
This topic describes how to use the TTranscoder class to mux AAC audio and H.264 video into an MP4 file.
The code snippets in this article are from the mux_mp4_file sample.
Complete C++ code¶
bool mux(const Options& opt)
{
deleteFile(opt.output_file.c_str());
try {
TTranscoder transcoder;
transcoder.allowDemoMode(true);
TMediaSocket outputSocket;
outputSocket.file(opt.output_file).streamType(StreamType::MP4);
// audio inputs
for (const auto& audioFile : opt.input_audio)
{
transcoder.addInput(
TMediaSocket()
.file(audioFile)
.streamType(StreamType::MP4)
);
outputSocket.addPin(TMediaPin()
.streamInfo(TAudioStreamInfo()
.streamType(StreamType::AAC)));
std::println("Muxing audio input: {}", audioFile);
}
// video inputs
for (const auto& videoFile : opt.input_video)
{
transcoder.addInput(
TMediaSocket()
.file(videoFile)
.streamType(StreamType::MP4)
);
outputSocket.addPin(TMediaPin()
.streamInfo(TVideoStreamInfo()
.streamType(StreamType::H264)));
std::println("Muxing video input: {}", videoFile);
}
transcoder.addOutput(outputSocket);
transcoder.open().run().close();
std::println("Output file: {}", opt.output_file);
return true;
} catch (const TAVBlocksException& ex) {
std::println(stderr, "AVBlocks error: {}", ex.what());
return false;
} catch (const std::exception& ex) {
std::println(stderr, "Error: {}", ex.what());
return false;
}
}