如何检测电影是3D的?

如何检测电影是3D的?,3d,ffmpeg,3d,Ffmpeg,有人知道如何检测视频文件是3D电影吗 我尝试过使用ffmpeg工具,但没有找到解决方法 这取决于格式 在线级别: 对于AVC,您可以查找框架包装安排SEI消息。 对于MVC,您可以查找片扩展NAL(type=20) 我看了你的档案。它是AVC 3D,框架包装类型为3(并排-L在左侧,R在右侧)。我提取了H.264流,在字节偏移量0x23:00 01 06 2D处发现这是一条帧打包安排(2D)类型的SEI消息(06)。实际上,您的文件包含指示3D的信息 Comannd线条工具,用于检测3D 使用

有人知道如何检测视频文件是3D电影吗

我尝试过使用ffmpeg工具,但没有找到解决方法


这取决于格式

在线级别: 对于AVC,您可以查找框架包装安排SEI消息。 对于MVC,您可以查找片扩展NAL(type=20)

我看了你的档案。它是AVC 3D,框架包装类型为3(并排-L在左侧,R在右侧)。我提取了H.264流,在字节偏移量0x23:00 01 06 2D处发现这是一条帧打包安排(2D)类型的SEI消息(06)。实际上,您的文件包含指示3D的信息

Comannd线条工具,用于检测3D

  • 使用mp4box-raw 1 82-3D-LHelEIJVxiE.mp4()提取h.264流
  • 以H.264基本流82-3D-LHelEIJVxiE_track1.h264为例,通过以下代码运行它:

    #包括
    #包括
    typedef无符号字符uint8;
    枚举结果代码
    {
    E_误差=-1,
    E_OK=0,
    E_No3D=2,
    E_Found3D=3,
    };
    枚举类型
    {
    NALType_Unknown=0,
    NALType_切片=1,
    NALType\u Slice\u DPA=2,
    NALType\u Slice\u DPB=3,
    NALType_切片_DPC=4,
    NALType\u Slice\u IDR=5,
    NALType_SEI=6,
    NALType_SPS=7,
    NALType_PPS=8,
    NALType_AU_分隔符=9,
    NALType_SequenceEnd=10,
    NALType_StreamEnd=11,
    NALType_FillerData=12,
    NALType_CodedLiceExtension=20,
    NALType_MAX=0x1f
    };
    枚举类型
    {
    SEIType_框架包装排列=0x2D
    };
    枚举起始状态
    {
    StartDestinate_none,
    StartCodeState_0,
    StartDestinate_0_0,
    StartCodeState_0_0_1
    };
    int-Is3D(std::ifstream和inputFile)
    {
    int nResult=E_OK;
    StartCodeState StartCodeState=StartCodeState\u无;
    而((E_OK==nResult)和(!inputFile.eof())
    {
    uint8_t byte=inputFile.get();
    开关(eStartCodeState)
    {
    案例开始破坏状态\u无:
    eStartCodeState=(字节==0)?StartCodeState_0:StartCodeState_无;
    打破
    案例开始状态0:
    eStartCodeState=(字节==0)?StartCodeState_0_0:StartCodeState_none;
    打破
    案例开始状态0\u 0:
    开关(字节)
    {
    案例0:eStartCodeState=StartCodeState\u 0\u 0;中断;
    案例1:eStartCodeState=StartCodeState_0_0_1;中断;
    默认值:eStartCodeState=StartDestinate\u无;
    }
    违约:
    ;
    }
    if(eStartCodeState==startDestinate\u 0\u 1)
    {
    uint8_t cNALType=inputFile.get();
    cNALType&=NALType\u MAX;
    开关(cNALType)
    {
    案例类型\代码扩展:
    nResult=E_Found3D;
    打破
    案件类型(SEI):
    {
    uint8_t cSEIType=inputFile.get();
    if(cSEIType==SEIType\U帧封装排列)
    {
    nResult=E_Found3D;
    }
    打破
    }
    违约:
    ;
    }
    eStartCodeState=StartCodeState\u none;
    }
    }
    返回结果;
    }
    int main(int argc,char*argv[])
    {
    int nResult=E_OK;
    如果(argc!=2)
    {
    nResult=E_误差;
    
    std::cerr不确定它是否有帮助:检测纵横比。3D电影有两倍宽度,例如3840 x 1080当您运行
    ffprobe 3dvideo.mp4
    ?您能运行mp4box+我的一段代码吗?需要源代码或二进制文件吗?什么平台?