我有 1000 多个包含错误级别信息的视频,因此无法在某些设备上播放。它们是 H.264 基线,在 mp4 容器中带有 aac 音频。我想纠正它们,但避免重新编码。我是否正确地假设这是可能的并且会更快?如何识别流中的 level_idc 位?所有流都将它们放在同一位置吗?我希望这只会出现在流中的一个地方,这个假设是否正确?更新:我遇到了一个声称可以执行此操作的 Windows 可执行链接。我希望能够在 unix 上执行此命令行,因此我可以编写脚本。
更多更新:根据以下 Roman 的回答。我挖掘了 MP4 语法,发现 Profile 和 Level 信息是avcC
atom under stsd
. 我可以看到该级别设置为1E
,我将其更正为1F
。之前:61 76 63 43 01 42 C0 1E FF E1 00 19 67 42 C0 1E
D9
之后:61 76 63 43 01 42 C0 1F FF E1 00 19 67 42 C0 1E
D9
MediaInfo 更改为:
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : Baseline@L3.0
Format settings, CABAC : No
Format settings, ReFrames : 3 frames
Muxing mode : Container profile=Baseline@3.1
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 1mn 4s
Bit rate : 3 000 Kbps
Width : 1 280 pixels
Height : 720 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 30.000 fps
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.109
Stream size : 22.7 MiB (92%)
Writing library : x264 core 120 r2151 a3f4407
Encoding settings : cabac=0 / ref=3 / deblock=1:0:0 / analyse=0x1:0x111 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=0 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=12 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=0 / weightp=0 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=abr / mbtree=1 / bitrate=3000 / ratetol=1.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
它引入了一个带有级别的 Muxing 模式参数,3.1
但可惜这个流也没有在设备上播放。如何在Format Profile
不重新编码的情况下更正这可能吗?