我使用以下命令将.ts
文件转换为:.mp4
ffmpeg -i hls-360p.ts -codec copy -bsf:a aac_adtstoasc hls-360p.mp4
尽管不打算重新编码,但 VLC 指出了略有不同的视频编解码器字符串:
- 输入
.ts
文件:H264 - MPEG-4 AVC (part 10)(h264)
- 输出
.mp4
文件:H264 - MPEG-4 AVC (part 10)(avc1)
有什么不同?
输入文件截图:
输出文件截图:
答案1
avc1
表示没有起始码的 H.264 比特流
MP4 容器格式存储没有起始码的 H.264 数据。相反,每个 NALU 都以长度字段为前缀,该字段给出了 NALU 的长度(以字节为单位)。长度字段的大小可能有所不同,但通常为 1、2 或 4 个字节。
并h264
指示带有起始码的H.264比特流。
通过无线方式传输的、包含在 MPEG-2 程序或传输流中或录制在 HD-DVD 上的 H.264 比特流的格式按照 ITU-T Rec. H.264 附件 B 中的描述进行格式化。根据此规范,比特流由一系列网络抽象层单元 (NALU) 组成,每个单元都以起始码为前缀,起始码等于 0x000001 或 0x00000001。
答案2
补充一下@Gyan 的回答,长度字段的大小称为 NALULengthSizeMinusOne,存在于 avc1 框的 avCc 部分。这个答案:关联显示出它们之间的明显差异。