如何将 H264 包装到 mp4 容器中?

Posted

技术标签:

【中文标题】如何将 H264 包装到 mp4 容器中?【英文标题】:How to wrap H264 into a mp4 container? 【发布时间】:2014-02-11 08:07:14 【问题描述】:

我有一个程序生成一堆原始 H264 帧,并希望将其放入 mp4 容器中进行流式传输。

有人知道怎么做吗?

我想我会使用 ffmpeg,但是,这需要用于商业用途,而且似乎 ffmpeg 只能通过它的 x264 库来做到这一点......它使用 GPL 许可证。

谢谢!

【问题讨论】:

libx264 做视频编码,MP4 由 FFmpeg 的 MP4 多路复用器产生,在 LGPL 下可用。如果您已经拥有 H.264 编码的视频源,则不需要 x264。 (如果你在内部使用它并且不分发它,你可以使用 libx264,但是,就像 Roman 说的那样,这可能不需要。同时分发 ffmpeg.exe “连同”你的封闭源应用程序可能没问题betterlogic.com/roger/2013/06/…)。无论如何 ffmpeg -f h264 input_filename -c copy output.mp4 工作? 【参考方案1】:

如果您正在寻找 FFMPEG 命令行来执行此操作,请尝试以下操作:

ffmpeg -i "source.h264" -c:v copy -f mp4 "myOutputFile.mp4"

如果您有单独的音频文件,也可以添加:

ffmpeg -i "source.h264" -i "myAudio" -c:v copy -c:a copy -f mp4 "myOutputFile.mp4"

如果您的音频也需要编码(例如编解码器 AAC-LC,比特率 256kbps):

ffmpeg -i "source.h264" -i "myAudio" -c:v copy -c:a aac -b:a 256k -strict -2 -f mp4 "myOutputFile.mp4"

【讨论】:

欣赏它,但我正在寻找一个库来为我做这件事,而不是命令行。 如果你愿意,你可以从你的程序中启动命令行,它真的很好用,我已经为几个项目做过了。 在 C# 中这很简单:Process procThumb = new Process(); procThumb.StartInfo.CreateNoWindow = true; procThumb.StartInfo.UseShellExecute = false; procThumb.StartInfo.FileName = path*to*ffmpeg.exe; procThumb.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; procThumb.StartInfo.Arguments = command*in*string; procThumb.Start();【参考方案2】:

libmp4v2 在 MPL 下,可以用作更大商业作品的一部分。它也比 libavformat 轻得多。

【讨论】:

以上是关于如何将 H264 包装到 mp4 容器中?的主要内容,如果未能解决你的问题,请参考以下文章

MP4V2封装的类库,可将H264和AAC直接打包到MP4容器中,堪称经典

如何将 H264 RTP 流从 PCAP 转换为可播放的视频文件

OpenCV 流使用 H264 (mp4) 编解码器捕获 CAM

如何将一个H264视频,AAC音频,一个中文字幕,一个英文字幕,合成一个高清MP4中英双字幕的视频文件?

在 mp4 容器中保存视频时 FPS 太高

Flash Media Server 可以通过 RTMP 流式传输 H264 吗?