video - 对于使用 ffmpeg 将 h.264 数据转换为 .mp4,我的数据包格式是否正确

标签 video ffmpeg h.264

我将使用 ffmpeg 将 h.264 流数据转换为 .mp4

SPS NALU:67 64 00 1F AC 56 50 20 06 1A 6E 04 04 04 0D A0 88 46 58

PPS 纳鲁:28 EE 37 27

我使用上述 NALU 制作了原始文件,如下所示:

|0x 00 00 00 01 | SPS | 0x 00 00 01 |聚苯硫醚 |帧数据 | 0x 00 00 01|

我的原始文件在这里:https://www.dropbox.com/s/gc9s9mll6ev9aoq/sps_pps_payload?dl=0

并自行构建数据:https://www.dropbox.com/s/ibs7io0aprpo66e/packet1?dl=0

在 ffmpeg 中使用以下命令:

ffmpeg.exe -f h264 -i RawInputFile -vcodec copy -r 25 OutPutFilename.mp4

但它总是给出: 尺寸为 XXXXX 的访问单元中缺少图片

没有框架!

流 0 解码失败

找不到流 0 的编解码器参数:未指定大小

我哪里错了?

最佳答案

您如何生成“RawInputFile”?查看 SPS,PPS 缓冲区有不同的帧头,0x00 0x00 0x00 0x01 在 SPS 的情况下 0x00 0x00 0x01 在 PPS 的情况下。虽然这不应该是问题。

但也有不同的 NAL header ,在 SPS 的情况下是 0x67,在 PPS 的情况下是 0x28。 NAL的低五位代表帧类型

例如

0x67 & 0x1f = 0x07 这是 SPS

0x28 & 0x1f = 0x08 即 PPS

但是为什么高三位在变呢?需要检查这 3 位代表什么。

关于您的问题,FFMPEG 或任何其他混合器需要以下格式的输入流,

0x00 0x00 0x00 0x01 0x67 <<......SPS 帧......>>

0x00 0x00 0x00 0x01 0x68 <<......PPS 帧......>>

0x00 0x00 0x00 0x01 0x65 <<......我帧.......>>

0x00 0x00 0x00 0x01 0x61 <<......P 帧......>>

.

.

0x00 0x00 0x00 0x01 0x67 <<......SPS 帧......>>

0x00 0x00 0x00 0x01 0x68 <<......PPS 帧......>>

注意: 这里 0x67、0x68 等仅供引用,高 3 位可以更改。

关于video - 对于使用 ffmpeg 将 h.264 数据转换为 .mp4,我的数据包格式是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25624719/

相关文章:

c# - 用 C# 中的新音频覆盖 mp4/wmv 视频的音频内容

ios - iOS 上从 mov 转换为 mp4 的视频无法在浏览器等上播放

ios - iOS Swift 上的 FFMpeg

android - 带有 NEON 优化的 FFMPEG

video - 如何使用 ffmpeg 提取时间准确的视频片段?

node.js - electron fluent-ffmpeg mergeToFile() 命令 promise 不会触发

ios - Apple 视频编码器 (hevc) 是无损的吗?

python - 当使用H264编码的MP4文件设置slices=n时,哪里可以查到当前NALU有多少个slice?

ffmpeg - CISCO H264 Encoding Images to H264系列

css - 限制标题背景视频的高度?