2506회 정기 채점기준표(JSON) 업데이트

This commit is contained in:
2025-07-03 16:54:25 +09:00
parent 91e6c19374
commit 1ef8d2faf8
23 changed files with 3265 additions and 282 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

739
DIC_2506A.json Normal file
View File

@@ -0,0 +1,739 @@
{
"0": {
"1": {
"ele": "none",
"point": 0
},
"2": {
"ele": "none",
"point": 0
},
"3": {
"ele": "none",
"point": 0
},
"4": {
"ele": "none",
"point": 0
},
"5": {
"ele": "none",
"point": 0
},
"6": {
"ele": "none",
"point": 0
},
"7": {
"ele": "none",
"point": 0
},
"8": {
"ele": "$[?(@.width == 65 && @.height == 45)]",
"type": "size",
"value": {
"width": 65,
"height": 45
},
"point": 4
},
"9": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"1": {
"1": {
"ele": "none",
"point": 0
},
"2": {
"ele": "none",
"point": 0
},
"3": {
"ele": "none",
"point": 0
},
"4": {
"ele": "none",
"point": 0
},
"5": {
"ele": "$.children[?(@.name=='Trail with Water')].name",
"value": "Trail with Water",
"point": 4
},
"6": {
"ele": "$.children[?(@.name=='Trail with Water')].text.font.names[0]",
"type": "font",
"value": "Arial",
"point": 2
},
"7": {
"ele": "$.children[?(@.name=='Trail with Water')].text.font.names[0]",
"value": "Arial-BoldItalicMT",
"point": 2
},
"8": {
"ele": "$.children[?(@.name=='Trail with Water')].text.font.sizes[0]",
"value": 48,
"point": 2
},
"9": {
"ele": "$.children[?(@.name=='Trail with Water')].text.font.colors[0]",
"type": "color",
"value": "76f3c8",
"point": 2
},
"10": {
"ele": "none",
"point": 0
},
"11": {
"ele": "none",
"point": 0
},
"12": {
"ele": "none",
"point": 0
},
"13": {
"ele": "$.children[?(@.name=='물길 따라 둘레길')].name",
"value": "물길 따라 둘레길",
"point": 4
},
"14": {
"ele": "$.children[?(@.name=='물길 따라 둘레길')].text.font.names[0]",
"type": "font",
"value": "GungsuhChe",
"point": 2,
"desc": {
"돋움체": "DotumChe",
"궁서체": "GungsuhChe",
"굴림체": "GulimChe",
"휴먼옛체": "YetR"
}
},
"15": {
"ele": "$.children[?(@.name=='물길 따라 둘레길')].text.font.sizes[0]",
"value": 36,
"point": 2
},
"16": {
"ele": "$.children[?(@.name=='물길 따라 둘레길')].text.font.colors[0]",
"type": "color",
"value": "fafd00",
"point": 2
},
"17": {
"ele": "none",
"point": 0
},
"18": {
"ele": "none",
"point": 0
},
"19": {
"ele": "none",
"point": 0
},
"20": {
"ele": "none",
"point": 0
},
"21": {
"ele": "none",
"point": 0
},
"22": {
"ele": "none",
"point": 0
},
"23": {
"ele": "none",
"point": 0
},
"24": {
"ele": "none",
"point": 0
},
"25": {
"ele": "none",
"point": 0
},
"26": {
"ele": "none",
"point": 0
},
"27": {
"ele": "$[?(@.width == 65 && @.height == 45)]",
"type": "size",
"value": {
"width": 65,
"height": 45
},
"point": 4
},
"28": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"2": {
"1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder",
"value": ["동영상.mp4", "이미지1.jpg", "이미지3.jpg", "이미지2.jpg"],
"point": 4,
"desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
},
"2": {
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
"type": "oneAnswer",
"value": {
"speed": "150"
},
"point": 2,
"desc": "100당 1배속 / 130 = 1.3배속"
},
"3": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "startEnd",
"media": "동영상.mp4",
"value": {
"start": "0",
"end": "350"
},
"point": 2,
"desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )"
},
"4": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "effect",
"media": "동영상.mp4",
"value": {
"ID": "90",
"VID104": "5",
"VID103": "1.5"
},
"point": 3,
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
},
"5": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "휴식 중인 청둥오리들",
"type": "video.Text",
"value": "휴식 중인 청둥오리들",
"point": 3
},
"6": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "휴식 중인 청둥오리들",
"type": "video.Text",
"value": "굴림체",
"point": 2
},
"7": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "휴식 중인 청둥오리들",
"type": "video.Text",
"value": "110",
"point": 2
},
"8": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "휴식 중인 청둥오리들",
"type": "video.Text.Color",
"value": "6ad2cd",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"9": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "휴식 중인 청둥오리들",
"type": "video.Location",
"value": ["0.29270834", "0.92962962"],
"point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
},
"10": {
"ele": "",
"search": "휴식 중인 청둥오리들",
"type": "video.StartTime",
"value": 160,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"11": {
"ele": "",
"search": "휴식 중인 청둥오리들",
"type": "video.Length",
"value": 180,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"12": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute",
"type": "Mute",
"media": "동영상.mp4",
"value": "1",
"point": 2
},
"13": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지1.jpg",
"value": 150,
"point": 2
},
"14": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지1.jpg",
"value": {
"ID": "102",
"VID100": "5"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"15": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지1.jpg",
"value": {
"ID": "12",
"Range": "470:500",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"16": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지3.jpg",
"value": 180,
"point": 2
},
"17": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지3.jpg",
"value": {
"ID": "67",
"VID102": "30"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"18": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지3.jpg",
"value": {
"ID": "14",
"Range": "620:680",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"19": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지2.jpg",
"value": 180,
"point": 2
},
"20": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지2.jpg",
"value": {
"ID": "103",
"VID102": "7"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"21": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지2.jpg",
"value": {
"ID": "7",
"Range": "800:860",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"22": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "둘레길 생태계 (Trail Ecosystem)",
"type": "video.Text",
"value": "둘레길 생태계 (Trail Ecosystem)",
"point": 3
},
"23": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "둘레길 생태계 (Trail Ecosystem)",
"type": "video.Text",
"value": "돋움체",
"point": 2
},
"24": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "둘레길 생태계 (Trail Ecosystem)",
"type": "video.Text",
"value": "150",
"point": 2
},
"25": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "둘레길 생태계 (Trail Ecosystem)",
"type": "video.Text.Color",
"value": "fff100",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"26": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
"search": "둘레길 생태계 (Trail Ecosystem)",
"type": "video.Text.Outline",
"value": {
"width": "40",
"color": "7b1fa2"
},
"point": 2,
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
},
"27": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr",
"search": "둘레길 생태계 (Trail Ecosystem)",
"type": "opening.Text.FadeInEffect",
"value": {
"VID505": "6",
"VID507": "2"
},
"point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
},
"28": {
"ele": "",
"search": "둘레길 생태계 (Trail Ecosystem)",
"type": "opening.StartTime",
"value": 0,
"point": 2,
"desc": "오프닝자막의 시작시간 value 속성만 수정"
},
"29": {
"ele": "",
"search": "둘레길 생태계 (Trail Ecosystem)",
"type": "opening.Length",
"value": 120,
"point": 2
},
"30": {
"ele": "",
"type": "audio.StartTime",
"media": "음악.mp3",
"value": 0,
"point": 2
},
"31": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime",
"media": "음악.mp3",
"value": 840,
"point": 2
},
"32": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "audio.Effect",
"media": "음악.mp3",
"value": {
"ID": "1",
"PlayTime": "60"
},
"point": 2,
"desc": "ID속성-페이드인:0 / 페이드아웃: 1"
},
"33": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"4": {
"1": {
"type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": ["650", "350"],
"point": 5,
"desc": "캔버스 사이즈 650*350"
},
"2": {
"type": "none",
"ele": "",
"point": 5,
"desc": "자유 변형 문항은 채점 불가"
},
"3": {
"type": "layer.exists",
"ele": "//Layer/Name/@value",
"value": "Flower",
"point": 5,
"desc": "Flower 레이어가 있는지 여부 체크"
},
"4": {
"type": "layer.Effects",
"ele": "//Layer[Name[@value='{search}']]/Effects/Item",
"search": "Flower",
"value": {
"name": "생동감",
"option": {
"생동감": "40"
}
},
"point": 5,
"desc": {
"흑백": "강도",
"밝기/대비": ["밝기", "대비"],
"노출": "노출",
"색조/채도": ["색조", "채도", "명도"],
"감마": ["리프트", "감마", "게인"],
"세피아": ["U", "V"],
"생동감": "생동감"
}
},
"5": {
"type": "none",
"ele": "",
"point": 6,
"desc": "올가미 도구/이미지 문항은 채점 불가"
},
"6": {
"type": "exists",
"ele": "//Layer/Effects/Item/Name/@value",
"value": "세피아",
"point": 6,
"desc": "세피아 효과가 있는지 여부 체크"
},
"7": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "ELLIPSE",
"point": 3,
"desc": "레이어 쉐이프 타입이 타원인지 체크"
},
"8": {
"type": "shape.size",
"ele": "//Layer//op_points",
"value": {
"width": 120,
"height": 120
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"9": {
"type": "shape.color",
"ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "7097BB",
"point": 6,
"desc": ""
},
"10": {
"type": "layer.blend.opacity",
"ele": "//Layer",
"value": {
"BlendOp": "반사",
"Opacity": "80"
},
"point": 6
},
"11": {
"type": "none",
"ele": "",
"point": 0,
"desc": "기본설정"
},
"12": {
"type": "none",
"ele": "",
"point": 0,
"desc": "파일명 확인"
}
},
"5": {
"1": {
"type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": ["650", "450"],
"point": 5,
"desc": "캔버스 사이즈 650*450"
},
"2": {
"type": "none",
"ele": "",
"point": 5,
"desc": "배경색 문항은 채점 불가"
},
"3": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Layering",
"point": 6,
"desc": "레이어 마스크 설정 확인"
},
"4": {
"type": "none",
"ele": "",
"point": 6,
"desc": "가로방향 흐릿하게 문항은 채점 불가"
},
"5": {
"type": "exists",
"ele": "//Layer//shape_type/@value",
"value": "ROUNDED_RECTANGLE",
"point": 3
},
"6": {
"type": "shape.size",
"ele": "//Layer//op_points",
"value": {
"width": 400,
"height": 60
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"7": {
"type": "gradient.color",
"ele": "//Layer/Shapes/Shape",
"startColor": "gradient_start_color/@value",
"endColor": "gradient_end_color/@value",
"value": {
"startColor": "ffe000",
"endColor": "34A159"
},
"point": 6
},
"8": {
"type": "text.exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value",
"value": "흰 꽃 사이 노란 꽃",
"point": 5
},
"9": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value",
"value": "맑은 고딕",
"point": 3
},
"10": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value",
"style": "Italic",
"value": "True",
"point": 3
},
"11": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value",
"value": "30",
"point": 3
},
"12": {
"type": "text.color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "b46Ef8",
"point": 3
},
"13": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value",
"value": "7",
"point": 3
},
"14": {
"type": "text.color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value",
"value": "ffffff",
"point": 3
},
"15": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Clipping",
"point": 6,
"desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함"
},
"16": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "RECTANGLE",
"point": 3,
"desc": {
"사각형": "RECTANGLE"
}
},
"17": {
"type": "clipping.size",
"ele": "//Layer//Shape[shape_type/@value='{option}']//op_points",
"option": "RECTANGLE",
"value": {
"width": 150,
"height": 150
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"18": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value",
"option": "RECTANGLE",
"value": "7",
"point": 3
},
"19": {
"type": "clipping.color",
"ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value",
"option": "RECTANGLE",
"value": "e8e88e",
"point": 3,
"desc": "채우기:secondary_color, 외곽선:primary_color"
},
"20": {
"type": "shadow",
"ele": "//Layer//Shape[shape_type/@value='{option}']",
"option": "RECTANGLE",
"value": {
"shadow": true,
"width": "3",
"distance": "5",
"blur": "1",
"angle": "320"
},
"point": 5,
"desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점"
},
"21": {
"type": "none",
"ele": "",
"point": 0,
"desc": "기본설정"
},
"22": {
"type": "none",
"ele": "",
"point": 0,
"desc": "파일명 확인"
}
}
}

View File

@@ -57,8 +57,8 @@
"point": 0 "point": 0
}, },
"4": { "4": {
"ele": "$.children[?(@.name=='꽃잎들')].name", "ele": "$.children[?(@.name=='산책길')].name",
"value": "꽃잎들", "value": "산책길",
"point": 4 "point": 4
}, },
"5": { "5": {
@@ -66,30 +66,30 @@
"point": 0 "point": 0
}, },
"6": { "6": {
"ele": "$.children[?(@.name=='Flower Rock')].name", "ele": "$.children[?(@.name=='Healing Forest')].name",
"value": "Flower Rock", "value": "Healing Forest",
"point": 4 "point": 4
}, },
"7": { "7": {
"ele": "$.children[?(@.name=='Flower Rock')].text.font.names[0]", "ele": "$.children[?(@.name=='Healing Forest')].text.font.names[0]",
"type": "font", "type": "font",
"value": "Arial", "value": "Arial",
"point": 2 "point": 2
}, },
"8": { "8": {
"ele": "$.children[?(@.name=='Flower Rock')].text.font.names[0]", "ele": "$.children[?(@.name=='Healing Forest')].text.font.names[0]",
"value": "Arial-BoldItalicMT", "value": "Arial-BoldItalicMT",
"point": 2 "point": 2
}, },
"9": { "9": {
"ele": "$.children[?(@.name=='Flower Rock')].text.font.sizes[0]", "ele": "$.children[?(@.name=='Healing Forest')].text.font.sizes[0]",
"value": 48, "value": 48,
"point": 2 "point": 2
}, },
"10": { "10": {
"ele": "$.children[?(@.name=='Flower Rock')].text.font.colors[0]", "ele": "$.children[?(@.name=='Healing Forest')].text.font.colors[0]",
"type": "color", "type": "color",
"value": "d6f592", "value": "d93009",
"point": 2 "point": 2
}, },
"11": { "11": {
@@ -105,12 +105,12 @@
"point": 0 "point": 0
}, },
"14": { "14": {
"ele": "$.children[?(@.name=='꽃과 바위')].name", "ele": "$.children[?(@.name=='치유의 숲')].name",
"value": "꽃과 바위", "value": "치유의 숲",
"point": 4 "point": 4
}, },
"15": { "15": {
"ele": "$.children[?(@.name=='꽃과 바위')].text.font.names[0]", "ele": "$.children[?(@.name=='치유의 숲')].text.font.names[0]",
"type": "font", "type": "font",
"value": "GungsuhChe", "value": "GungsuhChe",
"point": 2, "point": 2,
@@ -122,14 +122,14 @@
} }
}, },
"16": { "16": {
"ele": "$.children[?(@.name=='꽃과 바위')].text.font.sizes[0]", "ele": "$.children[?(@.name=='치유의 숲')].text.font.sizes[0]",
"value": 36, "value": 36,
"point": 2 "point": 2
}, },
"17": { "17": {
"ele": "$.children[?(@.name=='꽃과 바위')].text.font.colors[0]", "ele": "$.children[?(@.name=='치유의 숲')].text.font.colors[0]",
"type": "color", "type": "color",
"value": "0d17d5", "value": "19ea4a",
"point": 2 "point": 2
}, },
"18": { "18": {
@@ -149,8 +149,8 @@
"point": 0 "point": 0
}, },
"22": { "22": {
"ele": "$.children[?(@.name=='노랑꽃')].name", "ele": "$.children[?(@.name=='조각상')].name",
"value": "노랑꽃", "value": "조각상",
"point": 4 "point": 4
}, },
"23": { "23": {
@@ -184,15 +184,15 @@
"1": { "1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder", "type": "mediaOrder",
"value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"], "value": ["동영상.mp4", "이미지1.jpg", "이미지3.jpg", "이미지2.jpg"],
"point": 4, "point": 4,
"desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." "desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
}, },
"2": { "2": {
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
"type": "oneAnswer", "type": "oneAnswer",
"value": { "value": {
"speed": "140" "speed": "120"
}, },
"point": 2, "point": 2,
"desc": "100당 1배속 / 130 = 1.3배속" "desc": "100당 1배속 / 130 = 1.3배속"
@@ -203,73 +203,73 @@
"media": "동영상.mp4", "media": "동영상.mp4",
"value": { "value": {
"start": "0", "start": "0",
"end": "370" "end": "380"
}, },
"point": 2, "point": 2,
"desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다." "desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )"
}, },
"4": { "4": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "effect", "type": "effect",
"media": "동영상.mp4", "media": "동영상.mp4",
"value": { "value": {
"ID": "44", "ID": "168",
"VID100": "8", "VID100": "0.75",
"VID103": "0.89999998" "VID102": "10"
}, },
"point": 3, "point": 3,
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
}, },
"5": { "5": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Text", "type": "video.Text",
"value": "화단의", "value": "푸르른 풀과 꽃",
"point": 3 "point": 3
}, },
"6": { "6": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Text", "type": "video.Text",
"value": "돋움체", "value": "궁서체",
"point": 2 "point": 2
}, },
"7": { "7": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Text", "type": "video.Text",
"value": "110", "value": "100",
"point": 2 "point": 2
}, },
"8": { "8": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Text.Color", "type": "video.Text.Color",
"value": "ff531b", "value": "feccbc",
"point": 2, "point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
}, },
"9": { "9": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Location", "type": "video.Location",
"value": ["0.38333333", "0.92962962"], "value": ["0.36562499", "0.93333334"],
"point": 2, "point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
}, },
"10": { "10": {
"ele": "", "ele": "",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.StartTime", "type": "video.StartTime",
"value": 170, "value": 175,
"point": 2, "point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산" "desc": "내부적으로 자막의 시작시간과 길이를 계산"
}, },
"11": { "11": {
"ele": "", "ele": "",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Length", "type": "video.Length",
"value": 150, "value": 180,
"point": 2, "point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산" "desc": "내부적으로 자막의 시작시간과 길이를 계산"
}, },
@@ -283,17 +283,17 @@
"13": { "13": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지3.jpg", "media": "이미지1.jpg",
"value": "180", "value": 180,
"point": 2 "point": 2
}, },
"14": { "14": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지3.jpg", "media": "이미지1.jpg",
"value": { "value": {
"ID": "67", "ID": "184",
"VID102": "40" "VID101": "8"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -301,10 +301,10 @@
"15": { "15": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition", "type": "clipTransition",
"media": "이미지3.jpg", "media": "이미지1.jpg",
"value": { "value": {
"ID": "10", "ID": "7",
"Range": "490:550", "Range": "500:560",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -313,17 +313,17 @@
"16": { "16": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지1.jpg", "media": "이미지3.jpg",
"value": "180", "value": 150,
"point": 2 "point": 2
}, },
"17": { "17": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지1.jpg", "media": "이미지3.jpg",
"value": { "value": {
"ID": "103", "ID": "102",
"VID102": "7" "VID100": "5"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -331,10 +331,10 @@
"18": { "18": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition", "type": "clipTransition",
"media": "이미지1.jpg", "media": "이미지3.jpg",
"value": { "value": {
"ID": "12", "ID": "14",
"Range": "670:730", "Range": "680:710",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -344,7 +344,7 @@
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": "150", "value": 180,
"point": 2 "point": 2
}, },
"20": { "20": {
@@ -352,8 +352,8 @@
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": { "value": {
"ID": "102", "ID": "67",
"VID101": "3" "VID104": "3"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -363,8 +363,8 @@
"type": "clipTransition", "type": "clipTransition",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": { "value": {
"ID": "0", "ID": "20",
"Range": "850:880", "Range": "800:890",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -372,58 +372,58 @@
}, },
"22": { "22": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "video.Text", "type": "video.Text",
"value": "아름다운 꽃 축제 (Happy Flower Festival)", "value": "숲속 치유 공원 (Forest Healing Park)",
"point": 3 "point": 3
}, },
"23": { "23": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "video.Text", "type": "video.Text",
"value": "궁서체", "value": "바탕체",
"point": 2 "point": 2
}, },
"24": { "24": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "video.Text", "type": "video.Text",
"value": "140", "value": "150",
"point": 2 "point": 2
}, },
"25": { "25": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "video.Text.Color", "type": "video.Text.Color",
"value": "ec008c", "value": "fec02d",
"point": 2, "point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
}, },
"26": { "26": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "video.Text.Outline", "type": "video.Text.Outline",
"value": { "value": {
"width": "40", "width": "20",
"color": "fff9c4" "color": "262626"
}, },
"point": 2, "point": 2,
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
}, },
"27": { "27": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr", "ele": "//CROwneUnit[{index}]/CRCUnitArr",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "opening.Text.FadeInEffect", "type": "opening.Text.FadeInEffect",
"value": { "value": {
"ID": "14", "VID505": "14",
"PlayTime": "2" "VID507": "2"
}, },
"point": 3, "point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
}, },
"28": { "28": {
"ele": "", "ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "opening.StartTime", "type": "opening.StartTime",
"value": 0, "value": 0,
"point": 2, "point": 2,
@@ -431,7 +431,7 @@
}, },
"29": { "29": {
"ele": "", "ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "opening.Length", "type": "opening.Length",
"value": 120, "value": 120,
"point": 2 "point": 2
@@ -447,7 +447,7 @@
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime", "type": "audio.EndTime",
"media": "음악.mp3", "media": "음악.mp3",
"value": "870", "value": 870,
"point": 2 "point": 2
}, },
"32": { "32": {
@@ -456,7 +456,7 @@
"media": "음악.mp3", "media": "음악.mp3",
"value": { "value": {
"ID": "1", "ID": "1",
"PlayTime": "60" "PlayTime": "90"
}, },
"point": 2, "point": 2,
"desc": "ID속성-페이드인:0 / 페이드아웃: 1" "desc": "ID속성-페이드인:0 / 페이드아웃: 1"

739
DIC_2506C.json Normal file
View File

@@ -0,0 +1,739 @@
{
"0": {
"1": {
"ele": "none",
"point": 0
},
"2": {
"ele": "none",
"point": 0
},
"3": {
"ele": "none",
"point": 0
},
"4": {
"ele": "none",
"point": 0
},
"5": {
"ele": "none",
"point": 0
},
"6": {
"ele": "none",
"point": 0
},
"7": {
"ele": "none",
"point": 0
},
"8": {
"ele": "$[?(@.width == 65 && @.height == 45)]",
"type": "size",
"value": {
"width": 65,
"height": 45
},
"point": 4
},
"9": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"1": {
"1": {
"ele": "none",
"point": 0
},
"2": {
"ele": "none",
"point": 0
},
"3": {
"ele": "none",
"point": 0
},
"4": {
"ele": "none",
"point": 0
},
"5": {
"ele": "$.children[?(@.name=='Happy Lake Park')].name",
"value": "Happy Lake Park",
"point": 4
},
"6": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.names[0]",
"type": "font",
"value": "Arial",
"point": 2
},
"7": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.names[0]",
"value": "Arial-BoldItalicMT",
"point": 2
},
"8": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.sizes[0]",
"value": 48,
"point": 2
},
"9": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.colors[0]",
"type": "color",
"value": "bd04bb",
"point": 2
},
"10": {
"ele": "none",
"point": 0
},
"11": {
"ele": "none",
"point": 0
},
"12": {
"ele": "none",
"point": 0
},
"13": {
"ele": "$.children[?(@.name=='행복한 호수공원')].name",
"value": "행복한 호수공원",
"point": 4
},
"14": {
"ele": "$.children[?(@.name=='행복한 호수공원')].text.font.names[0]",
"type": "font",
"value": "GungsuhChe",
"point": 2,
"desc": {
"돋움체": "DotumChe",
"궁서체": "GungsuhChe",
"굴림체": "GulimChe",
"휴먼옛체": "YetR"
}
},
"15": {
"ele": "$.children[?(@.name=='행복한 호수공원')].text.font.sizes[0]",
"value": 36,
"point": 2
},
"16": {
"ele": "$.children[?(@.name=='행복한 호수공원')].text.font.colors[0]",
"type": "color",
"value": "146c08",
"point": 2
},
"17": {
"ele": "none",
"point": 0
},
"18": {
"ele": "none",
"point": 0
},
"19": {
"ele": "none",
"point": 0
},
"20": {
"ele": "none",
"point": 0
},
"21": {
"ele": "none",
"point": 0
},
"22": {
"ele": "none",
"point": 0
},
"23": {
"ele": "none",
"point": 0
},
"24": {
"ele": "none",
"point": 0
},
"25": {
"ele": "none",
"point": 0
},
"26": {
"ele": "none",
"point": 0
},
"27": {
"ele": "$[?(@.width == 65 && @.height == 45)]",
"type": "size",
"value": {
"width": 65,
"height": 45
},
"point": 4
},
"28": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"2": {
"1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder",
"value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"],
"point": 4,
"desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
},
"2": {
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
"type": "oneAnswer",
"value": {
"speed": "110"
},
"point": 2,
"desc": "100당 1배속 / 130 = 1.3배속"
},
"3": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "startEnd",
"media": "동영상.mp4",
"value": {
"start": "0",
"end": "380"
},
"point": 2,
"desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )"
},
"4": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "effect",
"media": "동영상.mp4",
"value": {
"ID": "44",
"VID100": "10",
"VID103": "1.2"
},
"point": 3,
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
},
"5": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "호수의 시원한 전경",
"type": "video.Text",
"value": "호수의 시원한 전경",
"point": 3
},
"6": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "호수의 시원한 전경",
"type": "video.Text",
"value": "굴림체",
"point": 2
},
"7": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "호수의 시원한 전경",
"type": "video.Text",
"value": "110",
"point": 2
},
"8": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "호수의 시원한 전경",
"type": "video.Text.Color",
"value": "f4511e",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"9": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "호수의 시원한 전경",
"type": "video.Location",
"value": ["0.3125", "0.92962962"],
"point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
},
"10": {
"ele": "",
"search": "호수의 시원한 전경",
"type": "video.StartTime",
"value": 170,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"11": {
"ele": "",
"search": "호수의 시원한 전경",
"type": "video.Length",
"value": 180,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"12": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute",
"type": "Mute",
"media": "동영상.mp4",
"value": "1",
"point": 2
},
"13": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지3.jpg",
"value": 150,
"point": 2
},
"14": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지3.jpg",
"value": {
"ID": "173",
"VID101": "300"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"15": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지3.jpg",
"value": {
"ID": "21",
"Range": "500:530",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"16": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지1.jpg",
"value": 210,
"point": 2
},
"17": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지1.jpg",
"value": {
"ID": "67",
"VID102": "60"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"18": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지1.jpg",
"value": {
"ID": "10",
"Range": "680:740",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"19": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지2.jpg",
"value": 180,
"point": 2
},
"20": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지2.jpg",
"value": {
"ID": "184",
"VID103": "50"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"21": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지2.jpg",
"value": {
"ID": "7",
"Range": "890:920",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"22": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text",
"value": "호수공원의 추억 (Memories of Lake Park)",
"point": 3
},
"23": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text",
"value": "궁서체",
"point": 2
},
"24": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text",
"value": "150",
"point": 2
},
"25": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text.Color",
"value": "1976d2",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"26": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text.Outline",
"value": {
"width": "25",
"color": "cdf9fc"
},
"point": 2,
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
},
"27": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.Text.FadeInEffect",
"value": {
"VID505": "15",
"VID507": "2"
},
"point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
},
"28": {
"ele": "",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.StartTime",
"value": 0,
"point": 2,
"desc": "오프닝자막의 시작시간 value 속성만 수정"
},
"29": {
"ele": "",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.Length",
"value": 120,
"point": 2
},
"30": {
"ele": "",
"type": "audio.StartTime",
"media": "음악.mp3",
"value": 0,
"point": 2
},
"31": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime",
"media": "음악.mp3",
"value": 900,
"point": 2
},
"32": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "audio.Effect",
"media": "음악.mp3",
"value": {
"ID": "1",
"PlayTime": "60"
},
"point": 2,
"desc": "ID속성-페이드인:0 / 페이드아웃: 1"
},
"33": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"4": {
"1": {
"type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": ["650", "350"],
"point": 5,
"desc": "캔버스 사이즈 650*350"
},
"2": {
"type": "none",
"ele": "",
"point": 5,
"desc": "자유 변형 문항은 채점 불가"
},
"3": {
"type": "layer.exists",
"ele": "//Layer/Name/@value",
"value": "Flower",
"point": 5,
"desc": "Flower 레이어가 있는지 여부 체크"
},
"4": {
"type": "layer.Effects",
"ele": "//Layer[Name[@value='{search}']]/Effects/Item",
"search": "Flower",
"value": {
"name": "생동감",
"option": {
"생동감": "40"
}
},
"point": 5,
"desc": {
"흑백": "강도",
"밝기/대비": ["밝기", "대비"],
"노출": "노출",
"색조/채도": ["색조", "채도", "명도"],
"감마": ["리프트", "감마", "게인"],
"세피아": ["U", "V"],
"생동감": "생동감"
}
},
"5": {
"type": "none",
"ele": "",
"point": 6,
"desc": "올가미 도구/이미지 문항은 채점 불가"
},
"6": {
"type": "exists",
"ele": "//Layer/Effects/Item/Name/@value",
"value": "세피아",
"point": 6,
"desc": "세피아 효과가 있는지 여부 체크"
},
"7": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "ELLIPSE",
"point": 3,
"desc": "레이어 쉐이프 타입이 타원인지 체크"
},
"8": {
"type": "shape.size",
"ele": "//Layer//op_points",
"value": {
"width": 120,
"height": 120
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"9": {
"type": "shape.color",
"ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "7097BB",
"point": 6,
"desc": ""
},
"10": {
"type": "layer.blend.opacity",
"ele": "//Layer",
"value": {
"BlendOp": "반사",
"Opacity": "80"
},
"point": 6
},
"11": {
"type": "none",
"ele": "",
"point": 0,
"desc": "기본설정"
},
"12": {
"type": "none",
"ele": "",
"point": 0,
"desc": "파일명 확인"
}
},
"5": {
"1": {
"type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": ["650", "450"],
"point": 5,
"desc": "캔버스 사이즈 650*450"
},
"2": {
"type": "none",
"ele": "",
"point": 5,
"desc": "배경색 문항은 채점 불가"
},
"3": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Layering",
"point": 6,
"desc": "레이어 마스크 설정 확인"
},
"4": {
"type": "none",
"ele": "",
"point": 6,
"desc": "가로방향 흐릿하게 문항은 채점 불가"
},
"5": {
"type": "exists",
"ele": "//Layer//shape_type/@value",
"value": "ROUNDED_RECTANGLE",
"point": 3
},
"6": {
"type": "shape.size",
"ele": "//Layer//op_points",
"value": {
"width": 400,
"height": 60
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"7": {
"type": "gradient.color",
"ele": "//Layer/Shapes/Shape",
"startColor": "gradient_start_color/@value",
"endColor": "gradient_end_color/@value",
"value": {
"startColor": "ffe000",
"endColor": "34A159"
},
"point": 6
},
"8": {
"type": "text.exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value",
"value": "흰 꽃 사이 노란 꽃",
"point": 5
},
"9": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value",
"value": "맑은 고딕",
"point": 3
},
"10": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value",
"style": "Italic",
"value": "True",
"point": 3
},
"11": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value",
"value": "30",
"point": 3
},
"12": {
"type": "text.color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "b46Ef8",
"point": 3
},
"13": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value",
"value": "7",
"point": 3
},
"14": {
"type": "text.color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value",
"value": "ffffff",
"point": 3
},
"15": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Clipping",
"point": 6,
"desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함"
},
"16": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "RECTANGLE",
"point": 3,
"desc": {
"사각형": "RECTANGLE"
}
},
"17": {
"type": "clipping.size",
"ele": "//Layer//Shape[shape_type/@value='{option}']//op_points",
"option": "RECTANGLE",
"value": {
"width": 150,
"height": 150
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"18": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value",
"option": "RECTANGLE",
"value": "7",
"point": 3
},
"19": {
"type": "clipping.color",
"ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value",
"option": "RECTANGLE",
"value": "e8e88e",
"point": 3,
"desc": "채우기:secondary_color, 외곽선:primary_color"
},
"20": {
"type": "shadow",
"ele": "//Layer//Shape[shape_type/@value='{option}']",
"option": "RECTANGLE",
"value": {
"shadow": true,
"width": "3",
"distance": "5",
"blur": "1",
"angle": "320"
},
"point": 5,
"desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점"
},
"21": {
"type": "none",
"ele": "",
"point": 0,
"desc": "기본설정"
},
"22": {
"type": "none",
"ele": "",
"point": 0,
"desc": "파일명 확인"
}
}
}

746
DPI_2506C.json Normal file
View File

@@ -0,0 +1,746 @@
{
"0": {
"1": {
"ele": "none",
"point": 0
},
"2": {
"ele": "none",
"point": 0
},
"3": {
"ele": "none",
"point": 0
},
"4": {
"ele": "none",
"point": 0
},
"5": {
"ele": "none",
"point": 0
},
"6": {
"ele": "none",
"point": 0
},
"7": {
"ele": "none",
"point": 0
},
"8": {
"ele": "$[?(@.width == 65 && @.height == 45)]",
"type": "size",
"value": {
"width": 65,
"height": 45
},
"point": 4
},
"9": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"1": {
"1": {
"ele": "none",
"point": 0
},
"2": {
"ele": "none",
"point": 0
},
"3": {
"ele": "none",
"point": 0
},
"4": {
"ele": "none",
"point": 0
},
"5": {
"ele": "$.children[?(@.name=='Happy Lake Park')].name",
"value": "Happy Lake Park",
"point": 4
},
"6": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.names[0]",
"type": "font",
"value": "Arial",
"point": 2
},
"7": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.names[0]",
"value": "Arial-BoldItalicMT",
"point": 2
},
"8": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.sizes[0]",
"value": 48,
"point": 2
},
"9": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.colors[0]",
"type": "color",
"value": "bd04bb",
"point": 2
},
"10": {
"ele": "none",
"point": 0
},
"11": {
"ele": "none",
"point": 0
},
"12": {
"ele": "none",
"point": 0
},
"13": {
"ele": "$.children[?(@.name=='행복한 호수공원')].name",
"value": "행복한 호수공원",
"point": 4
},
"14": {
"ele": "$.children[?(@.name=='행복한 호수공원')].text.font.names[0]",
"type": "font",
"value": "GungsuhChe",
"point": 2,
"desc": {
"돋움체": "DotumChe",
"궁서체": "GungsuhChe",
"굴림체": "GulimChe",
"휴먼옛체": "YetR"
}
},
"15": {
"ele": "$.children[?(@.name=='행복한 호수공원')].text.font.sizes[0]",
"value": 36,
"point": 2
},
"16": {
"ele": "$.children[?(@.name=='행복한 호수공원')].text.font.colors[0]",
"type": "color",
"value": "146c08",
"point": 2
},
"17": {
"ele": "none",
"point": 0
},
"18": {
"ele": "none",
"point": 0
},
"19": {
"ele": "none",
"point": 0
},
"20": {
"ele": "none",
"point": 0
},
"21": {
"ele": "none",
"point": 0
},
"22": {
"ele": "none",
"point": 0
},
"23": {
"ele": "none",
"point": 0
},
"24": {
"ele": "none",
"point": 0
},
"25": {
"ele": "none",
"point": 0
},
"26": {
"ele": "none",
"point": 0
},
"27": {
"ele": "$[?(@.width == 65 && @.height == 45)]",
"type": "size",
"value": {
"width": 65,
"height": 45
},
"point": 4
},
"28": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"2": {
"1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder",
"value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"],
"point": 4,
"desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
},
"2": {
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
"type": "oneAnswer",
"value": {
"speed": "110"
},
"point": 2,
"desc": "100당 1배속 / 130 = 1.3배속"
},
"3": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "startEnd",
"media": "동영상.mp4",
"value": {
"start": "0",
"end": "380"
},
"point": 2,
"desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )"
},
"4": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "effect",
"media": "동영상.mp4",
"value": {
"ID": "44",
"VID100": "10",
"VID103": "1.2"
},
"point": 3,
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
},
"5": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "호수의 시원한 전경",
"type": "video.Text",
"value": "호수의 시원한 전경",
"point": 3
},
"6": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "호수의 시원한 전경",
"type": "video.Text",
"value": "굴림체",
"point": 2
},
"7": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "호수의 시원한 전경",
"type": "video.Text",
"value": "110",
"point": 2
},
"8": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "호수의 시원한 전경",
"type": "video.Text.Color",
"value": "f4511e",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"9": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "호수의 시원한 전경",
"type": "video.Location",
"value": ["0.3125", "0.92962962"],
"point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
},
"10": {
"ele": "",
"search": "호수의 시원한 전경",
"type": "video.StartTime",
"value": 170,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"11": {
"ele": "",
"search": "호수의 시원한 전경",
"type": "video.Length",
"value": 180,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"12": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute",
"type": "Mute",
"media": "동영상.mp4",
"value": "1",
"point": 2
},
"13": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지3.jpg",
"value": 150,
"point": 2
},
"14": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지3.jpg",
"value": {
"ID": "173",
"VID101": "300"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"15": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지3.jpg",
"value": {
"ID": "21",
"Range": "500:530",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"16": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지1.jpg",
"value": 210,
"point": 2
},
"17": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지1.jpg",
"value": {
"ID": "67",
"VID102": "60"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"18": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지1.jpg",
"value": {
"ID": "10",
"Range": "680:740",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"19": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지2.jpg",
"value": 180,
"point": 2
},
"20": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지2.jpg",
"value": {
"ID": "184",
"VID103": "50"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"21": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지2.jpg",
"value": {
"ID": "7",
"Range": "890:920",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"22": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text",
"value": "호수공원의 추억 (Memories of Lake Park)",
"point": 3
},
"23": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text",
"value": "궁서체",
"point": 2
},
"24": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text",
"value": "150",
"point": 2
},
"25": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text.Color",
"value": "1976d2",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"26": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text.Outline",
"value": {
"width": "25",
"color": "cdf9fc"
},
"point": 2,
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
},
"27": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.Text.FadeInEffect",
"value": {
"VID505": "15",
"VID507": "2"
},
"point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
},
"28": {
"ele": "",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.StartTime",
"value": 0,
"point": 2,
"desc": "오프닝자막의 시작시간 value 속성만 수정"
},
"29": {
"ele": "",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.Length",
"value": 120,
"point": 2
},
"30": {
"ele": "",
"type": "audio.StartTime",
"media": "음악.mp3",
"value": 0,
"point": 2
},
"31": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime",
"media": "음악.mp3",
"value": 900,
"point": 2
},
"32": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "audio.Effect",
"media": "음악.mp3",
"value": {
"ID": "1",
"PlayTime": "60"
},
"point": 2,
"desc": "ID속성-페이드인:0 / 페이드아웃: 1"
},
"33": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"4": {
"1": {
"type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": ["650", "350"],
"point": 5,
"desc": "캔버스 사이즈 650*350"
},
"2": {
"type": "none",
"ele": "",
"point": 5,
"desc": "자유 변형 문항은 채점 불가"
},
"3": {
"type": "layer.exists",
"ele": "//Layer/Name/@value",
"value": "Museum",
"point": 5,
"desc": "Museum 레이어가 있는지 여부 체크"
},
"4": {
"type": "layer.Effects",
"ele": "//Layer[Name[@value='{search}']]/Effects/Item",
"search": "Museum",
"value": {
"name": "선명하게",
"option": {
"양": "10"
}
},
"point": 5,
"desc": {
"흑백": "강도",
"밝기/대비": ["밝기", "대비"],
"노출": "노출",
"색조/채도": ["색조", "채도", "명도"],
"감마": ["리프트", "감마", "게인"],
"세피아": ["U", "V"],
"생동감": "생동감",
"흐리게": "반경",
"글로우": ["반경", "밝기", "대비"],
"픽셀효과": "셀크기",
"선명하게": "양"
}
},
"5": {
"type": "none",
"ele": "",
"point": 6,
"desc": "올가미 도구/이미지 문항은 채점 불가"
},
"6": {
"type": "exists",
"ele": "//Layer/Effects/Item/Name/@value",
"value": "세피아",
"point": 6,
"desc": "세피아 효과가 있는지 여부 체크"
},
"7": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "ROUNDED_RECTANGLE",
"point": 3,
"desc": "레이어 쉐이프 타입이 타원인지 체크"
},
"8": {
"type": "shape.size",
"ele": "//Layer//op_points",
"value": {
"width": 90,
"height": 20
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"9": {
"type": "shape.color",
"ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "FF0000",
"point": 6,
"desc": ""
},
"10": {
"type": "layer.blend.opacity",
"ele": "//Layer",
"value": {
"BlendOp": "중첩",
"Opacity": "80"
},
"point": 6
},
"11": {
"type": "none",
"ele": "",
"point": 0,
"desc": "기본설정"
},
"12": {
"type": "none",
"ele": "",
"point": 0,
"desc": "파일명 확인"
}
},
"5": {
"1": {
"type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": ["650", "450"],
"point": 5,
"desc": "캔버스 사이즈 650*450"
},
"2": {
"type": "none",
"ele": "",
"point": 5,
"desc": "배경색 문항은 채점 불가"
},
"3": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Layering",
"point": 6,
"desc": "레이어 마스크 설정 확인"
},
"4": {
"type": "none",
"ele": "",
"point": 6,
"desc": "가로방향 흐릿하게 문항은 채점 불가"
},
"5": {
"type": "exists",
"ele": "//Layer//shape_type/@value",
"value": "RECTANGLE",
"point": 3,
"desc": "모서리가 둥근 사각형 : ROUNDED_RECTANGLE / 사각형 : RECTANGLE"
},
"6": {
"type": "shape.size",
"ele": "//Layer//op_points",
"value": {
"width": 380,
"height": 70
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"7": {
"type": "gradient.color",
"ele": "//Layer/Shapes/Shape",
"startColor": "gradient_start_color/@value",
"endColor": "gradient_end_color/@value",
"value": {
"startColor": "00C9BA",
"endColor": "A6A600"
},
"point": 6
},
"8": {
"type": "text.exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value",
"value": "해양 박물관",
"point": 5
},
"9": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value",
"value": "바탕체",
"point": 3
},
"10": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value",
"style": "Italic",
"value": "True",
"point": 3
},
"11": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value",
"value": "36",
"point": 3
},
"12": {
"type": "text.color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "151DE8",
"point": 3
},
"13": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value",
"value": "3",
"point": 3
},
"14": {
"type": "text.color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value",
"value": "FFFFFF",
"point": 3
},
"15": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Clipping",
"point": 6,
"desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함"
},
"16": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "ELLIPSE",
"point": 3,
"desc": {
"사각형": "RECTANGLE",
"원형/타원형": "ELLIPSE",
"17~20 문항 option값 변경":""
}
},
"17": {
"type": "clipping.size",
"ele": "//Layer//Shape[shape_type/@value='{option}']//op_points",
"option": "ELLIPSE",
"value": {
"width": 180,
"height": 180
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"18": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value",
"option": "ELLIPSE",
"value": "7",
"point": 3
},
"19": {
"type": "clipping.color",
"ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value",
"option": "ELLIPSE",
"value": "FF3030",
"point": 3,
"desc": "채우기:secondary_color, 외곽선:primary_color"
},
"20": {
"type": "shadow",
"ele": "//Layer//Shape[shape_type/@value='{option}']",
"option": "ELLIPSE",
"value": {
"shadow": true,
"width": "5",
"distance": "3",
"blur": "1",
"angle": "320"
},
"point": 5,
"desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점"
},
"21": {
"type": "none",
"ele": "",
"point": 0,
"desc": "기본설정"
},
"22": {
"type": "none",
"ele": "",
"point": 0,
"desc": "파일명 확인"
}
}
}

View File

@@ -231,32 +231,25 @@ function getGpdpScore(gpdpData, scoringJson, index) {
name: name, name: name,
option: {}, option: {},
} }
const optionKeys = Object.keys(rightAnswer['option']);
if (name === '흑백') { if (name === '흑백') {
const Intensity = xpath.select1('Intensity/@value', effectData)?.value; const Intensity = xpath.select1('Intensity/@value', effectData)?.value;
const optionKeys = Object.keys(rightAnswer['option']);
if (optionKeys.includes('강도')) userAnswer['option']['강도'] = Intensity; if (optionKeys.includes('강도')) userAnswer['option']['강도'] = Intensity;
} }
else if (name === '밝기/대비') { else if (name === '밝기/대비') {
const brightness = xpath.select1('brightness/@value', effectData)?.value; const brightness = xpath.select1('brightness/@value', effectData)?.value;
const contrast = xpath.select1('contrast/@value', effectData)?.value; const contrast = xpath.select1('contrast/@value', effectData)?.value;
const optionKeys = Object.keys(rightAnswer['option']);
if (optionKeys.includes('밝기')) userAnswer['option']['밝기'] = brightness; if (optionKeys.includes('밝기')) userAnswer['option']['밝기'] = brightness;
if (optionKeys.includes('대비')) userAnswer['option']['대비'] = contrast; if (optionKeys.includes('대비')) userAnswer['option']['대비'] = contrast;
} }
else if (name === '노출') { else if (name === '노출') {
const ExposureValue = xpath.select1('ExposureValue/@value', effectData)?.value; const ExposureValue = xpath.select1('ExposureValue/@value', effectData)?.value;
const optionKeys = Object.keys(rightAnswer['option']);
if (optionKeys.includes('노출')) userAnswer['option']['노출'] = ExposureValue; if (optionKeys.includes('노출')) userAnswer['option']['노출'] = ExposureValue;
} }
else if (name === '색조/채도') { else if (name === '색조/채도') {
const hue = xpath.select1('hue/@value', effectData)?.value; const hue = xpath.select1('hue/@value', effectData)?.value;
const saturation = xpath.select1('saturation/@value', effectData)?.value; const saturation = xpath.select1('saturation/@value', effectData)?.value;
const lightness = xpath.select1('lightness/@value', effectData)?.value; const lightness = xpath.select1('lightness/@value', effectData)?.value;
const optionKeys = Object.keys(rightAnswer['option']);
if (optionKeys.includes('색조')) userAnswer['option']['색조'] = hue; if (optionKeys.includes('색조')) userAnswer['option']['색조'] = hue;
if (optionKeys.includes('채도')) userAnswer['option']['채도'] = saturation; if (optionKeys.includes('채도')) userAnswer['option']['채도'] = saturation;
if (optionKeys.includes('명도')) userAnswer['option']['명도'] = lightness; if (optionKeys.includes('명도')) userAnswer['option']['명도'] = lightness;
@@ -265,8 +258,6 @@ function getGpdpScore(gpdpData, scoringJson, index) {
const lift = xpath.select1('Lift/@value', effectData)?.value; const lift = xpath.select1('Lift/@value', effectData)?.value;
const gamma = xpath.select1('Gamma/@value', effectData)?.value; const gamma = xpath.select1('Gamma/@value', effectData)?.value;
const gain = xpath.select1('Gain/@value', effectData)?.value; const gain = xpath.select1('Gain/@value', effectData)?.value;
const optionKeys = Object.keys(rightAnswer['option']);
if (optionKeys.includes('리프트')) userAnswer['option']['리프트'] = lift; if (optionKeys.includes('리프트')) userAnswer['option']['리프트'] = lift;
if (optionKeys.includes('감마')) userAnswer['option']['감마'] = gamma; if (optionKeys.includes('감마')) userAnswer['option']['감마'] = gamma;
if (optionKeys.includes('게인')) userAnswer['option']['게인'] = gain; if (optionKeys.includes('게인')) userAnswer['option']['게인'] = gain;
@@ -286,14 +277,32 @@ function getGpdpScore(gpdpData, scoringJson, index) {
// 설정한 값 그대로 적용되는 경우도 있어서 오차범위 2로 설정 // 설정한 값 그대로 적용되는 경우도 있어서 오차범위 2로 설정
const userValue = parseInt(vibranceValue, 10); const userValue = parseInt(vibranceValue, 10);
const rightValue = parseInt(rightAnswer.option['생동감'], 10); const rightValue = parseInt(rightAnswer.option['생동감'], 10);
if (Math.abs(rightValue - userValue) <= 2) { if (Math.abs(rightValue - userValue) <= 2) {
const optionKeys = Object.keys(rightAnswer['option']);
if (optionKeys.includes('생동감')) { if (optionKeys.includes('생동감')) {
userAnswer['option']['생동감'] = rightValue.toString(); userAnswer['option']['생동감'] = rightValue.toString();
} }
} }
} }
else if (name === '흐리게') {
const radius = xpath.select1('radius/@value', effectData)?.value;
if (optionKeys.includes('반경')) userAnswer['option']['반경'] = radius;
}
else if (name === '글로우') {
const radius = xpath.select1('radius/@value', effectData)?.value;
const brightness = xpath.select1('brightness/@value', effectData)?.value;
const contrast = xpath.select1('contrast/@value', effectData)?.value;
if (optionKeys.includes('반경')) userAnswer['option']['반경'] = radius;
if (optionKeys.includes('밝기')) userAnswer['option']['밝기'] = brightness;
if (optionKeys.includes('대비')) userAnswer['option']['대비'] = contrast;
}
else if (name === '픽셀효과') {
const cellSize = xpath.select1('cellSize/@value', effectData)?.value;
if (optionKeys.includes('셀크기')) userAnswer['option']['셀크기'] = cellSize;
}
else if (name === '선명하게') {
const amount = xpath.select1('amount/@value', effectData)?.value;
if (optionKeys.includes('양')) userAnswer['option']['양'] = amount;
}
for (const key in rightAnswer.option) { for (const key in rightAnswer.option) {
// 속성값이 정답과 다른 경우가 있으면 오답처리 // 속성값이 정답과 다른 경우가 있으면 오답처리

View File

@@ -13,28 +13,28 @@ const getToday = require('./getToday.js');
// const { get } = require('http'); // const { get } = require('http');
const todayDate = getToday(); const todayDate = getToday();
const examRound = '2504'; const examRound = '2506';
// const dic_or_dpi = 'DIC' // const DICorDPI = 'DIC'
const dic_or_dpi = 'DPI' const DICorDPI = 'DPI'
const examTypes = [ const examTypes = [
// 'A', // 'A',
'B', // 'B',
// 'C', 'C',
// 'D' // 'D'
]; ];
// testMode가 true일 경우 TEST 폴더에 있는 답안 파일을 읽어옴 // testMode가 true일 경우 TEST 폴더에 있는 답안 파일을 읽어옴
// const testMode = false; const testMode = false;
const testMode = true; // const testMode = true;
const outputExcelFiles = []; const outputExcelFiles = [];
examTypes.forEach(type => { examTypes.forEach(type => {
const scoringJson = require(`./DIC_${examRound}${type}.json`); const scoringJson = require(`./${DICorDPI}_${examRound}${type}.json`);
const answerFilesDir = `./output/${examRound}/${type}/${testMode ? 'TEST' : dic_or_dpi}`; const answerFilesDir = `./output/${examRound}/${type}/${testMode ? 'TEST' : DICorDPI}`;
let outputExcelFile = `./${todayDate}_${dic_or_dpi}_${examRound}${type}_채점결과.xlsx`; let outputExcelFile = `./${todayDate}_${DICorDPI}_${examRound}${type}_채점결과.xlsx`;
if (testMode) { if (testMode) {
outputExcelFile = `./00_${dic_or_dpi}_${examRound}${type}_TEST.xlsx`; outputExcelFile = `./00_${DICorDPI}_${examRound}${type}_TEST.xlsx`;
} }
// const scoringJson = require(`./DIC_${examRound}${type}.json`); // const scoringJson = require(`./DIC_${examRound}${type}.json`);
// const answerFilesDir = `./output/${examRound}/${type}/${testMode ? 'TEST' : 'DIC'}`; // const answerFilesDir = `./output/${examRound}/${type}/${testMode ? 'TEST' : 'DIC'}`;
@@ -492,7 +492,11 @@ function getGmepScore(gmepData, scoringJson, index) {
// CRTrackClip 요소의 Pos(시작시간)과 Length(재생길이)를 구함 // CRTrackClip 요소의 Pos(시작시간)과 Length(재생길이)를 구함
const pos = xpath.select1('@Pos', crTrackClip); const pos = xpath.select1('@Pos', crTrackClip);
const length = xpath.select1('@Length', crTrackClip); const length = xpath.select1('@Length', crTrackClip);
userAnswer = { start: pos.value, end: length.value }
userAnswer = {
start: pos.value,
end: length.value
}
} }
} }
totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult); totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
@@ -629,7 +633,7 @@ function getGmepScore(gmepData, scoringJson, index) {
else { else {
const xpathExpr = ele?.replace(/{CRClipIndex}/g, crclipIndex); const xpathExpr = ele?.replace(/{CRClipIndex}/g, crclipIndex);
const imageLength = xpath.select1(xpathExpr, gmepXmlDoc); const imageLength = xpath.select1(xpathExpr, gmepXmlDoc);
userAnswer = imageLength.value; userAnswer = parseInt(imageLength.value, 10);
} }
totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult); totalScore += compareAndScore(userAnswer, rightAnswer, point, key, scoringResult);
} }
@@ -650,7 +654,7 @@ function getGmepScore(gmepData, scoringJson, index) {
userAnswer = null; userAnswer = null;
} else { } else {
const length = crTrackClip.getAttribute('Length'); const length = crTrackClip.getAttribute('Length');
userAnswer = length; userAnswer = parseInt(length, 10);
} }
} }
else if (type.includes('Effect')) { else if (type.includes('Effect')) {
@@ -738,12 +742,12 @@ function getGmepScore(gmepData, scoringJson, index) {
} }
else if (type.includes('FadeInEffect')) { else if (type.includes('FadeInEffect')) {
const attributes = subtitleResult.attributes; const attributes = subtitleResult.attributes;
const id = attributes.getNamedItem('VID505').value; const VID505 = attributes.getNamedItem('VID505').value;
const playtime = attributes.getNamedItem('VID507').value; const VID507 = attributes.getNamedItem('VID507').value;
userAnswer = { userAnswer = {
"ID": id, "VID505": VID505,
"PlayTime": playtime, "VID507": VID507,
}; };
} }
else { else {

Binary file not shown.

View File

@@ -186,15 +186,15 @@
"1": { "1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder", "type": "mediaOrder",
"value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"], "value": ["동영상.mp4", "이미지1.jpg", "이미지3.jpg", "이미지2.jpg"],
"point": 4, "point": 4,
"desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." "desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
}, },
"2": { "2": {
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
"type": "oneAnswer", "type": "oneAnswer",
"value": { "value": {
"speed": "140" "speed": "150"
}, },
"point": 2, "point": 2,
"desc": "100당 1배속 / 130 = 1.3배속" "desc": "100당 1배속 / 130 = 1.3배속"
@@ -205,73 +205,73 @@
"media": "동영상.mp4", "media": "동영상.mp4",
"value": { "value": {
"start": "0", "start": "0",
"end": "370" "end": "350"
}, },
"point": 2, "point": 2,
"desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다." "desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )"
}, },
"4": { "4": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "effect", "type": "effect",
"media": "동영상.mp4", "media": "동영상.mp4",
"value": { "value": {
"ID": "44", "ID": "90",
"VID100": "8", "VID104": "5",
"VID103": "0.89999998" "VID103": "1.5"
}, },
"point": 3, "point": 3,
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
}, },
"5": { "5": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "화단의 꽃들", "search": "휴식 중인 청둥오리들",
"type": "video.Text", "type": "video.Text",
"value": "화단의 꽃들", "value": "휴식 중인 청둥오리들",
"point": 3 "point": 3
}, },
"6": { "6": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "화단의 꽃들", "search": "휴식 중인 청둥오리들",
"type": "video.Text", "type": "video.Text",
"value": "돋움체", "value": "굴림체",
"point": 2 "point": 2
}, },
"7": { "7": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "화단의 꽃들", "search": "휴식 중인 청둥오리들",
"type": "video.Text", "type": "video.Text",
"value": "110", "value": "110",
"point": 2 "point": 2
}, },
"8": { "8": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "화단의 꽃들", "search": "휴식 중인 청둥오리들",
"type": "video.Text.Color", "type": "video.Text.Color",
"value": "ff531b", "value": "6ad2cd",
"point": 2, "point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
}, },
"9": { "9": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "화단의 꽃들", "search": "휴식 중인 청둥오리들",
"type": "video.Location", "type": "video.Location",
"value": ["0.38333333", "0.92962962"], "value": ["0.29270834", "0.92962962"],
"point": 2, "point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
}, },
"10": { "10": {
"ele": "", "ele": "",
"search": "화단의 꽃들", "search": "휴식 중인 청둥오리들",
"type": "video.StartTime", "type": "video.StartTime",
"value": 170, "value": 160,
"point": 2, "point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산" "desc": "내부적으로 자막의 시작시간과 길이를 계산"
}, },
"11": { "11": {
"ele": "", "ele": "",
"search": "화단의 꽃들", "search": "휴식 중인 청둥오리들",
"type": "video.Length", "type": "video.Length",
"value": 150, "value": 180,
"point": 2, "point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산" "desc": "내부적으로 자막의 시작시간과 길이를 계산"
}, },
@@ -285,17 +285,17 @@
"13": { "13": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지3.jpg", "media": "이미지1.jpg",
"value": "180", "value": 150,
"point": 2 "point": 2
}, },
"14": { "14": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지3.jpg", "media": "이미지1.jpg",
"value": { "value": {
"ID": "67", "ID": "102",
"VID102": "40" "VID100": "5"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -303,10 +303,10 @@
"15": { "15": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition", "type": "clipTransition",
"media": "이미지3.jpg", "media": "이미지1.jpg",
"value": { "value": {
"ID": "10", "ID": "12",
"Range": "490:550", "Range": "470:500",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -315,17 +315,17 @@
"16": { "16": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지1.jpg", "media": "이미지3.jpg",
"value": "180", "value": 180,
"point": 2 "point": 2
}, },
"17": { "17": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지1.jpg", "media": "이미지3.jpg",
"value": { "value": {
"ID": "103", "ID": "67",
"VID102": "7" "VID102": "30"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -333,10 +333,10 @@
"18": { "18": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition", "type": "clipTransition",
"media": "이미지1.jpg", "media": "이미지3.jpg",
"value": { "value": {
"ID": "12", "ID": "14",
"Range": "670:730", "Range": "620:680",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -346,7 +346,7 @@
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": "150", "value": 180,
"point": 2 "point": 2
}, },
"20": { "20": {
@@ -354,8 +354,8 @@
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": { "value": {
"ID": "102", "ID": "103",
"VID101": "3" "VID102": "7"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -365,8 +365,8 @@
"type": "clipTransition", "type": "clipTransition",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": { "value": {
"ID": "0", "ID": "7",
"Range": "850:880", "Range": "800:860",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -374,58 +374,58 @@
}, },
"22": { "22": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "둘레길 생태계 (Trail Ecosystem)",
"type": "video.Text", "type": "video.Text",
"value": "아름다운 꽃 축제 (Happy Flower Festival)", "value": "둘레길 생태계 (Trail Ecosystem)",
"point": 3 "point": 3
}, },
"23": { "23": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "둘레길 생태계 (Trail Ecosystem)",
"type": "video.Text", "type": "video.Text",
"value": "궁서체", "value": "돋움체",
"point": 2 "point": 2
}, },
"24": { "24": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "둘레길 생태계 (Trail Ecosystem)",
"type": "video.Text", "type": "video.Text",
"value": "140", "value": "150",
"point": 2 "point": 2
}, },
"25": { "25": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "둘레길 생태계 (Trail Ecosystem)",
"type": "video.Text.Color", "type": "video.Text.Color",
"value": "ec008c", "value": "fff100",
"point": 2, "point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
}, },
"26": { "26": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "둘레길 생태계 (Trail Ecosystem)",
"type": "video.Text.Outline", "type": "video.Text.Outline",
"value": { "value": {
"width": "40", "width": "40",
"color": "fff9c4" "color": "7b1fa2"
}, },
"point": 2, "point": 2,
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
}, },
"27": { "27": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr", "ele": "//CROwneUnit[{index}]/CRCUnitArr",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "둘레길 생태계 (Trail Ecosystem)",
"type": "opening.Text.FadeInEffect", "type": "opening.Text.FadeInEffect",
"value": { "value": {
"ID": "14", "VID505": "6",
"PlayTime": "2" "VID507": "2"
}, },
"point": 3, "point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
}, },
"28": { "28": {
"ele": "", "ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "둘레길 생태계 (Trail Ecosystem)",
"type": "opening.StartTime", "type": "opening.StartTime",
"value": 0, "value": 0,
"point": 2, "point": 2,
@@ -433,7 +433,7 @@
}, },
"29": { "29": {
"ele": "", "ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "둘레길 생태계 (Trail Ecosystem)",
"type": "opening.Length", "type": "opening.Length",
"value": 120, "value": 120,
"point": 2 "point": 2
@@ -449,7 +449,7 @@
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime", "type": "audio.EndTime",
"media": "음악.mp3", "media": "음악.mp3",
"value": "870", "value": 840,
"point": 2 "point": 2
}, },
"32": { "32": {

View File

@@ -184,15 +184,15 @@
"1": { "1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder", "type": "mediaOrder",
"value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"], "value": ["동영상.mp4", "이미지1.jpg", "이미지3.jpg", "이미지2.jpg"],
"point": 4, "point": 4,
"desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." "desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
}, },
"2": { "2": {
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
"type": "oneAnswer", "type": "oneAnswer",
"value": { "value": {
"speed": "140" "speed": "120"
}, },
"point": 2, "point": 2,
"desc": "100당 1배속 / 130 = 1.3배속" "desc": "100당 1배속 / 130 = 1.3배속"
@@ -203,73 +203,73 @@
"media": "동영상.mp4", "media": "동영상.mp4",
"value": { "value": {
"start": "0", "start": "0",
"end": "370" "end": "380"
}, },
"point": 2, "point": 2,
"desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다." "desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )"
}, },
"4": { "4": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "effect", "type": "effect",
"media": "동영상.mp4", "media": "동영상.mp4",
"value": { "value": {
"ID": "44", "ID": "168",
"VID100": "8", "VID100": "0.75",
"VID103": "0.89999998" "VID102": "10"
}, },
"point": 3, "point": 3,
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
}, },
"5": { "5": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Text", "type": "video.Text",
"value": "화단의", "value": "푸르른 풀과 꽃",
"point": 3 "point": 3
}, },
"6": { "6": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Text", "type": "video.Text",
"value": "돋움체", "value": "궁서체",
"point": 2 "point": 2
}, },
"7": { "7": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Text", "type": "video.Text",
"value": "110", "value": "100",
"point": 2 "point": 2
}, },
"8": { "8": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Text.Color", "type": "video.Text.Color",
"value": "ff531b", "value": "feccbc",
"point": 2, "point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
}, },
"9": { "9": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Location", "type": "video.Location",
"value": ["0.38333333", "0.92962962"], "value": ["0.36562499", "0.93333334"],
"point": 2, "point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
}, },
"10": { "10": {
"ele": "", "ele": "",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.StartTime", "type": "video.StartTime",
"value": 170, "value": 175,
"point": 2, "point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산" "desc": "내부적으로 자막의 시작시간과 길이를 계산"
}, },
"11": { "11": {
"ele": "", "ele": "",
"search": "화단의", "search": "푸르른 풀과 꽃",
"type": "video.Length", "type": "video.Length",
"value": 150, "value": 180,
"point": 2, "point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산" "desc": "내부적으로 자막의 시작시간과 길이를 계산"
}, },
@@ -283,17 +283,17 @@
"13": { "13": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지3.jpg", "media": "이미지1.jpg",
"value": "180", "value": 180,
"point": 2 "point": 2
}, },
"14": { "14": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지3.jpg", "media": "이미지1.jpg",
"value": { "value": {
"ID": "67", "ID": "184",
"VID102": "40" "VID101": "8"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -301,10 +301,10 @@
"15": { "15": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition", "type": "clipTransition",
"media": "이미지3.jpg", "media": "이미지1.jpg",
"value": { "value": {
"ID": "10", "ID": "7",
"Range": "490:550", "Range": "500:560",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -313,17 +313,17 @@
"16": { "16": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지1.jpg", "media": "이미지3.jpg",
"value": "180", "value": 150,
"point": 2 "point": 2
}, },
"17": { "17": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지1.jpg", "media": "이미지3.jpg",
"value": { "value": {
"ID": "103", "ID": "102",
"VID102": "7" "VID100": "5"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -331,10 +331,10 @@
"18": { "18": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']", "ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition", "type": "clipTransition",
"media": "이미지1.jpg", "media": "이미지3.jpg",
"value": { "value": {
"ID": "12", "ID": "14",
"Range": "670:730", "Range": "680:710",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -344,7 +344,7 @@
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": "150", "value": 180,
"point": 2 "point": 2
}, },
"20": { "20": {
@@ -352,8 +352,8 @@
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": { "value": {
"ID": "102", "ID": "67",
"VID101": "3" "VID104": "3"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -363,8 +363,8 @@
"type": "clipTransition", "type": "clipTransition",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": { "value": {
"ID": "0", "ID": "20",
"Range": "850:880", "Range": "800:890",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -372,58 +372,58 @@
}, },
"22": { "22": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "video.Text", "type": "video.Text",
"value": "아름다운 꽃 축제 (Happy Flower Festival)", "value": "숲속 치유 공원 (Forest Healing Park)",
"point": 3 "point": 3
}, },
"23": { "23": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "video.Text", "type": "video.Text",
"value": "궁서체", "value": "바탕체",
"point": 2 "point": 2
}, },
"24": { "24": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "video.Text", "type": "video.Text",
"value": "140", "value": "150",
"point": 2 "point": 2
}, },
"25": { "25": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "video.Text.Color", "type": "video.Text.Color",
"value": "ec008c", "value": "fec02d",
"point": 2, "point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
}, },
"26": { "26": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "video.Text.Outline", "type": "video.Text.Outline",
"value": { "value": {
"width": "40", "width": "20",
"color": "fff9c4" "color": "262626"
}, },
"point": 2, "point": 2,
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
}, },
"27": { "27": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr", "ele": "//CROwneUnit[{index}]/CRCUnitArr",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "opening.Text.FadeInEffect", "type": "opening.Text.FadeInEffect",
"value": { "value": {
"ID": "14", "VID505": "14",
"PlayTime": "2" "VID507": "2"
}, },
"point": 3, "point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
}, },
"28": { "28": {
"ele": "", "ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "opening.StartTime", "type": "opening.StartTime",
"value": 0, "value": 0,
"point": 2, "point": 2,
@@ -431,7 +431,7 @@
}, },
"29": { "29": {
"ele": "", "ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "숲속 치유 공원 (Forest Healing Park)",
"type": "opening.Length", "type": "opening.Length",
"value": 120, "value": 120,
"point": 2 "point": 2
@@ -447,7 +447,7 @@
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime", "type": "audio.EndTime",
"media": "음악.mp3", "media": "음악.mp3",
"value": "870", "value": 870,
"point": 2 "point": 2
}, },
"32": { "32": {
@@ -456,7 +456,7 @@
"media": "음악.mp3", "media": "음악.mp3",
"value": { "value": {
"ID": "1", "ID": "1",
"PlayTime": "60" "PlayTime": "90"
}, },
"point": 2, "point": 2,
"desc": "ID속성-페이드인:0 / 페이드아웃: 1" "desc": "ID속성-페이드인:0 / 페이드아웃: 1"

View File

@@ -188,13 +188,13 @@
"type": "mediaOrder", "type": "mediaOrder",
"value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"], "value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"],
"point": 4, "point": 4,
"desc": "비디오1 트랙에 있는 클립의 ClipIndex값을 기준으로 CRClipArr에서 Path값을 가져와서 정답 채점, 클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다." "desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
}, },
"2": { "2": {
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed", "ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
"type": "oneAnswer", "type": "oneAnswer",
"value": { "value": {
"speed": "140" "speed": "110"
}, },
"point": 2, "point": 2,
"desc": "100당 1배속 / 130 = 1.3배속" "desc": "100당 1배속 / 130 = 1.3배속"
@@ -205,10 +205,10 @@
"media": "동영상.mp4", "media": "동영상.mp4",
"value": { "value": {
"start": "0", "start": "0",
"end": "370" "end": "380"
}, },
"point": 2, "point": 2,
"desc": "시작시간과 재생시간 정답값 입력, 3번문항은 '동영상.mp4' 클립의 길이를 확인하는 문항이므로 media는 수정할 필요가 없다." "desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )"
}, },
"4": { "4": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
@@ -216,52 +216,52 @@
"media": "동영상.mp4", "media": "동영상.mp4",
"value": { "value": {
"ID": "44", "ID": "44",
"VID100": "8", "VID100": "10",
"VID103": "0.89999998" "VID103": "1.2"
}, },
"point": 3, "point": 3,
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요" "desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
}, },
"5": { "5": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "화단의 꽃들", "search": "호수의 시원한 전경",
"type": "video.Text", "type": "video.Text",
"value": "화단의 꽃들", "value": "호수의 시원한 전경",
"point": 3 "point": 3
}, },
"6": { "6": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "화단의 꽃들", "search": "호수의 시원한 전경",
"type": "video.Text", "type": "video.Text",
"value": "돋움체", "value": "굴림체",
"point": 2 "point": 2
}, },
"7": { "7": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "화단의 꽃들", "search": "호수의 시원한 전경",
"type": "video.Text", "type": "video.Text",
"value": "110", "value": "110",
"point": 2 "point": 2
}, },
"8": { "8": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "화단의 꽃들", "search": "호수의 시원한 전경",
"type": "video.Text.Color", "type": "video.Text.Color",
"value": "ff531b", "value": "f4511e",
"point": 2, "point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
}, },
"9": { "9": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "화단의 꽃들", "search": "호수의 시원한 전경",
"type": "video.Location", "type": "video.Location",
"value": ["0.38333333", "0.92962962"], "value": ["0.3125", "0.92962962"],
"point": 2, "point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다" "desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
}, },
"10": { "10": {
"ele": "", "ele": "",
"search": "화단의 꽃들", "search": "호수의 시원한 전경",
"type": "video.StartTime", "type": "video.StartTime",
"value": 170, "value": 170,
"point": 2, "point": 2,
@@ -269,9 +269,9 @@
}, },
"11": { "11": {
"ele": "", "ele": "",
"search": "화단의 꽃들", "search": "호수의 시원한 전경",
"type": "video.Length", "type": "video.Length",
"value": 150, "value": 180,
"point": 2, "point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산" "desc": "내부적으로 자막의 시작시간과 길이를 계산"
}, },
@@ -286,7 +286,7 @@
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지3.jpg", "media": "이미지3.jpg",
"value": "180", "value": 150,
"point": 2 "point": 2
}, },
"14": { "14": {
@@ -294,8 +294,8 @@
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지3.jpg", "media": "이미지3.jpg",
"value": { "value": {
"ID": "67", "ID": "173",
"VID102": "40" "VID101": "300"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -305,8 +305,8 @@
"type": "clipTransition", "type": "clipTransition",
"media": "이미지3.jpg", "media": "이미지3.jpg",
"value": { "value": {
"ID": "10", "ID": "21",
"Range": "490:550", "Range": "500:530",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -316,7 +316,7 @@
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지1.jpg", "media": "이미지1.jpg",
"value": "180", "value": 210,
"point": 2 "point": 2
}, },
"17": { "17": {
@@ -324,8 +324,8 @@
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지1.jpg", "media": "이미지1.jpg",
"value": { "value": {
"ID": "103", "ID": "67",
"VID102": "7" "VID102": "60"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -335,8 +335,8 @@
"type": "clipTransition", "type": "clipTransition",
"media": "이미지1.jpg", "media": "이미지1.jpg",
"value": { "value": {
"ID": "12", "ID": "10",
"Range": "670:730", "Range": "680:740",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -346,7 +346,7 @@
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length", "ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength", "type": "imageLength",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": "150", "value": 180,
"point": 2 "point": 2
}, },
"20": { "20": {
@@ -354,8 +354,8 @@
"type": "imageOverlay", "type": "imageOverlay",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": { "value": {
"ID": "102", "ID": "184",
"VID101": "3" "VID103": "50"
}, },
"point": 2, "point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경" "desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
@@ -365,8 +365,8 @@
"type": "clipTransition", "type": "clipTransition",
"media": "이미지2.jpg", "media": "이미지2.jpg",
"value": { "value": {
"ID": "0", "ID": "7",
"Range": "850:880", "Range": "890:920",
"Type": "2" "Type": "2"
}, },
"point": 2, "point": 2,
@@ -374,58 +374,58 @@
}, },
"22": { "22": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name", "ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text", "type": "video.Text",
"value": "아름다운 꽃 축제 (Happy Flower Festival)", "value": "호수공원의 추억 (Memories of Lake Park)",
"point": 3 "point": 3
}, },
"23": { "23": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text", "type": "video.Text",
"value": "궁서체", "value": "궁서체",
"point": 2 "point": 2
}, },
"24": { "24": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text", "type": "video.Text",
"value": "140", "value": "150",
"point": 2 "point": 2
}, },
"25": { "25": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text.Color", "type": "video.Text.Color",
"value": "ec008c", "value": "1976d2",
"point": 2, "point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)" "desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
}, },
"26": { "26": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']", "ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text.Outline", "type": "video.Text.Outline",
"value": { "value": {
"width": "40", "width": "25",
"color": "fff9c4" "color": "cdf9fc"
}, },
"point": 2, "point": 2,
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성" "desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
}, },
"27": { "27": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr", "ele": "//CROwneUnit[{index}]/CRCUnitArr",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.Text.FadeInEffect", "type": "opening.Text.FadeInEffect",
"value": { "value": {
"ID": "14", "VID505": "15",
"PlayTime": "2" "VID507": "2"
}, },
"point": 3, "point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다." "desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
}, },
"28": { "28": {
"ele": "", "ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.StartTime", "type": "opening.StartTime",
"value": 0, "value": 0,
"point": 2, "point": 2,
@@ -433,7 +433,7 @@
}, },
"29": { "29": {
"ele": "", "ele": "",
"search": "아름다운 꽃 축제 (Happy Flower Festival)", "search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.Length", "type": "opening.Length",
"value": 120, "value": 120,
"point": 2 "point": 2
@@ -449,7 +449,7 @@
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']", "ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime", "type": "audio.EndTime",
"media": "음악.mp3", "media": "음악.mp3",
"value": "870", "value": 900,
"point": 2 "point": 2
}, },
"32": { "32": {

View File

@@ -0,0 +1,746 @@
{
"0": {
"1": {
"ele": "none",
"point": 0
},
"2": {
"ele": "none",
"point": 0
},
"3": {
"ele": "none",
"point": 0
},
"4": {
"ele": "none",
"point": 0
},
"5": {
"ele": "none",
"point": 0
},
"6": {
"ele": "none",
"point": 0
},
"7": {
"ele": "none",
"point": 0
},
"8": {
"ele": "$[?(@.width == 65 && @.height == 45)]",
"type": "size",
"value": {
"width": 65,
"height": 45
},
"point": 4
},
"9": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"1": {
"1": {
"ele": "none",
"point": 0
},
"2": {
"ele": "none",
"point": 0
},
"3": {
"ele": "none",
"point": 0
},
"4": {
"ele": "none",
"point": 0
},
"5": {
"ele": "$.children[?(@.name=='Happy Lake Park')].name",
"value": "Happy Lake Park",
"point": 4
},
"6": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.names[0]",
"type": "font",
"value": "Arial",
"point": 2
},
"7": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.names[0]",
"value": "Arial-BoldItalicMT",
"point": 2
},
"8": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.sizes[0]",
"value": 48,
"point": 2
},
"9": {
"ele": "$.children[?(@.name=='Happy Lake Park')].text.font.colors[0]",
"type": "color",
"value": "bd04bb",
"point": 2
},
"10": {
"ele": "none",
"point": 0
},
"11": {
"ele": "none",
"point": 0
},
"12": {
"ele": "none",
"point": 0
},
"13": {
"ele": "$.children[?(@.name=='행복한 호수공원')].name",
"value": "행복한 호수공원",
"point": 4
},
"14": {
"ele": "$.children[?(@.name=='행복한 호수공원')].text.font.names[0]",
"type": "font",
"value": "GungsuhChe",
"point": 2,
"desc": {
"돋움체": "DotumChe",
"궁서체": "GungsuhChe",
"굴림체": "GulimChe",
"휴먼옛체": "YetR"
}
},
"15": {
"ele": "$.children[?(@.name=='행복한 호수공원')].text.font.sizes[0]",
"value": 36,
"point": 2
},
"16": {
"ele": "$.children[?(@.name=='행복한 호수공원')].text.font.colors[0]",
"type": "color",
"value": "146c08",
"point": 2
},
"17": {
"ele": "none",
"point": 0
},
"18": {
"ele": "none",
"point": 0
},
"19": {
"ele": "none",
"point": 0
},
"20": {
"ele": "none",
"point": 0
},
"21": {
"ele": "none",
"point": 0
},
"22": {
"ele": "none",
"point": 0
},
"23": {
"ele": "none",
"point": 0
},
"24": {
"ele": "none",
"point": 0
},
"25": {
"ele": "none",
"point": 0
},
"26": {
"ele": "none",
"point": 0
},
"27": {
"ele": "$[?(@.width == 65 && @.height == 45)]",
"type": "size",
"value": {
"width": 65,
"height": 45
},
"point": 4
},
"28": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"2": {
"1": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[not(@Length<='5' and @ClipLength='-1')]/@ClipIndex",
"type": "mediaOrder",
"value": ["동영상.mp4", "이미지3.jpg", "이미지1.jpg", "이미지2.jpg"],
"point": 4,
"desc": "클립의 ClipIndex값이 -1인 경우와 길이가 5프레임 이하인 경우는 제외한다."
},
"2": {
"ele": "/CROASTERP/CRTrackArr[1]/CRVideoTrackArr[1]/CRTrackList[1]/CRTrackClip[1]/@Speed",
"type": "oneAnswer",
"value": {
"speed": "110"
},
"point": 2,
"desc": "100당 1배속 / 130 = 1.3배속"
},
"3": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "startEnd",
"media": "동영상.mp4",
"value": {
"start": "0",
"end": "380"
},
"point": 2,
"desc": "start: 시작시간 / end: 재생시간( 12.20 = 12*30 + 20 = 380 )"
},
"4": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "effect",
"media": "동영상.mp4",
"value": {
"ID": "44",
"VID100": "10",
"VID103": "1.2"
},
"point": 3,
"desc": "value값의 키값(VID___)은 이펙트의 속성종류에 따라 변경되므로 채점기준표작성시 확인 필요"
},
"5": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "호수의 시원한 전경",
"type": "video.Text",
"value": "호수의 시원한 전경",
"point": 3
},
"6": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "호수의 시원한 전경",
"type": "video.Text",
"value": "굴림체",
"point": 2
},
"7": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "호수의 시원한 전경",
"type": "video.Text",
"value": "110",
"point": 2
},
"8": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "호수의 시원한 전경",
"type": "video.Text.Color",
"value": "f4511e",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"9": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@*[name()='VID600' or name()='VID601']",
"search": "호수의 시원한 전경",
"type": "video.Location",
"value": ["0.3125", "0.92962962"],
"point": 2,
"desc": "정답 파일의 자막 좌표를 기준으로 프로그램 내부적으로 0.1까지 오차를 허용한다"
},
"10": {
"ele": "",
"search": "호수의 시원한 전경",
"type": "video.StartTime",
"value": 170,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"11": {
"ele": "",
"search": "호수의 시원한 전경",
"type": "video.Length",
"value": 180,
"point": 2,
"desc": "내부적으로 자막의 시작시간과 길이를 계산"
},
"12": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Mute",
"type": "Mute",
"media": "동영상.mp4",
"value": "1",
"point": 2
},
"13": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지3.jpg",
"value": 150,
"point": 2
},
"14": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지3.jpg",
"value": {
"ID": "173",
"VID101": "300"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"15": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지3.jpg",
"value": {
"ID": "21",
"Range": "500:530",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"16": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지1.jpg",
"value": 210,
"point": 2
},
"17": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지1.jpg",
"value": {
"ID": "67",
"VID102": "60"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"18": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지1.jpg",
"value": {
"ID": "10",
"Range": "680:740",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"19": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']/@Length",
"type": "imageLength",
"media": "이미지2.jpg",
"value": 180,
"point": 2
},
"20": {
"ele": "//CRTrackList[@Name='비디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "imageOverlay",
"media": "이미지2.jpg",
"value": {
"ID": "184",
"VID103": "50"
},
"point": 2,
"desc": "오버레이 속성 키값(VID10X) 확인하고 변경"
},
"21": {
"ele": "//CRTransFilter[@ClipIndex='{CRTrackClipIndex}']",
"type": "clipTransition",
"media": "이미지2.jpg",
"value": {
"ID": "7",
"Range": "890:920",
"Type": "2"
},
"point": 2,
"desc": "오버랩일 경우 Type속성값 16으로 변경"
},
"22": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr/@Name",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text",
"value": "호수공원의 추억 (Memories of Lake Park)",
"point": 3
},
"23": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID102",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text",
"value": "궁서체",
"point": 2
},
"24": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool[@Type='1']/GCUnit/@VID101",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text",
"value": "150",
"point": 2
},
"25": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='4']/@VID100",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text.Color",
"value": "1976d2",
"point": 2,
"desc": "컬러값은 RGB로 입력한다, [대소문자, #]허용 (#FFFFFF, ffffff 두 값 모두 허용)"
},
"26": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr//GCUnitPool/GCUnit[@Type='2']",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "video.Text.Outline",
"value": {
"width": "25",
"color": "cdf9fc"
},
"point": 2,
"desc": "두께는 XML에서는 소수점으로 표기되지만, 프로그램 내부적으로 변환하여 사용하므로 현재 파일에서는 정수로 작성"
},
"27": {
"ele": "//CROwneUnit[{index}]/CRCUnitArr",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.Text.FadeInEffect",
"value": {
"VID505": "15",
"VID507": "2"
},
"point": 3,
"desc": "오프닝자막의 나타나기 효과를 확인하는 문항. id속성은 VID505, playtime속성은 VID507으로 XML 내부에 표기되어 있다."
},
"28": {
"ele": "",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.StartTime",
"value": 0,
"point": 2,
"desc": "오프닝자막의 시작시간 value 속성만 수정"
},
"29": {
"ele": "",
"search": "호수공원의 추억 (Memories of Lake Park)",
"type": "opening.Length",
"value": 120,
"point": 2
},
"30": {
"ele": "",
"type": "audio.StartTime",
"media": "음악.mp3",
"value": 0,
"point": 2
},
"31": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']",
"type": "audio.EndTime",
"media": "음악.mp3",
"value": 900,
"point": 2
},
"32": {
"ele": "//CRTrackList[@Name='오디오1']/CRTrackClip[@ClipIndex='{CRClipIndex}']//CRFilter",
"type": "audio.Effect",
"media": "음악.mp3",
"value": {
"ID": "1",
"PlayTime": "60"
},
"point": 2,
"desc": "ID속성-페이드인:0 / 페이드아웃: 1"
},
"33": {
"ele": "none",
"point": 0,
"desc": "파일명 확인"
}
},
"4": {
"1": {
"type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": ["650", "350"],
"point": 5,
"desc": "캔버스 사이즈 650*350"
},
"2": {
"type": "none",
"ele": "",
"point": 5,
"desc": "자유 변형 문항은 채점 불가"
},
"3": {
"type": "layer.exists",
"ele": "//Layer/Name/@value",
"value": "Museum",
"point": 5,
"desc": "Museum 레이어가 있는지 여부 체크"
},
"4": {
"type": "layer.Effects",
"ele": "//Layer[Name[@value='{search}']]/Effects/Item",
"search": "Museum",
"value": {
"name": "선명하게",
"option": {
"양": "10"
}
},
"point": 5,
"desc": {
"흑백": "강도",
"밝기/대비": ["밝기", "대비"],
"노출": "노출",
"색조/채도": ["색조", "채도", "명도"],
"감마": ["리프트", "감마", "게인"],
"세피아": ["U", "V"],
"생동감": "생동감",
"흐리게": "반경",
"글로우": ["반경", "밝기", "대비"],
"픽셀효과": "셀크기",
"선명하게": "양"
}
},
"5": {
"type": "none",
"ele": "",
"point": 6,
"desc": "올가미 도구/이미지 문항은 채점 불가"
},
"6": {
"type": "exists",
"ele": "//Layer/Effects/Item/Name/@value",
"value": "세피아",
"point": 6,
"desc": "세피아 효과가 있는지 여부 체크"
},
"7": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "ROUNDED_RECTANGLE",
"point": 3,
"desc": "레이어 쉐이프 타입이 타원인지 체크"
},
"8": {
"type": "shape.size",
"ele": "//Layer//op_points",
"value": {
"width": 90,
"height": 20
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"9": {
"type": "shape.color",
"ele": "//Layer//Shape[contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "FF0000",
"point": 6,
"desc": ""
},
"10": {
"type": "layer.blend.opacity",
"ele": "//Layer",
"value": {
"BlendOp": "중첩",
"Opacity": "80"
},
"point": 6
},
"11": {
"type": "none",
"ele": "",
"point": 0,
"desc": "기본설정"
},
"12": {
"type": "none",
"ele": "",
"point": 0,
"desc": "파일명 확인"
}
},
"5": {
"1": {
"type": "canvas.Size",
"ele": "//Document/Width/@value | //Document/Height/@value",
"value": ["650", "450"],
"point": 5,
"desc": "캔버스 사이즈 650*450"
},
"2": {
"type": "none",
"ele": "",
"point": 5,
"desc": "배경색 문항은 채점 불가"
},
"3": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Layering",
"point": 6,
"desc": "레이어 마스크 설정 확인"
},
"4": {
"type": "none",
"ele": "",
"point": 6,
"desc": "가로방향 흐릿하게 문항은 채점 불가"
},
"5": {
"type": "exists",
"ele": "//Layer//shape_type/@value",
"value": "RECTANGLE",
"point": 3,
"desc": "모서리가 둥근 사각형 : ROUNDED_RECTANGLE / 사각형 : RECTANGLE"
},
"6": {
"type": "shape.size",
"ele": "//Layer//op_points",
"value": {
"width": 380,
"height": 70
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"7": {
"type": "gradient.color",
"ele": "//Layer/Shapes/Shape",
"startColor": "gradient_start_color/@value",
"endColor": "gradient_end_color/@value",
"value": {
"startColor": "00C9BA",
"endColor": "A6A600"
},
"point": 6
},
"8": {
"type": "text.exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/lines/Item/@value",
"value": "해양 박물관",
"point": 5
},
"9": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Name/@value",
"value": "바탕체",
"point": 3
},
"10": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/{style}/@value",
"style": "Italic",
"value": "True",
"point": 3
},
"11": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/font/Size/@value",
"value": "36",
"point": 3
},
"12": {
"type": "text.color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Interior')]/secondary_color/@value",
"value": "151DE8",
"point": 3
},
"13": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='TEXT']/outline_peninfo/Width/@value",
"value": "3",
"point": 3
},
"14": {
"type": "text.color",
"ele": "//Layer//Shape[shape_type/@value='TEXT'][contains(draw_type/@value, 'Outline')]/primary_color/@value",
"value": "FFFFFF",
"point": 3
},
"15": {
"type": "exists",
"ele": "//Layer/MaskOpType/@value",
"value": "Clipping",
"point": 6,
"desc": "클리핑 마스크 항목은 별도 레이어로 추가되고 해당 속성을 추가해놓은 레이어가 있는지 여부 체크 함"
},
"16": {
"type": "exists",
"ele": "//Layer/Shapes/Shape/shape_type/@value",
"value": "ELLIPSE",
"point": 3,
"desc": {
"사각형": "RECTANGLE",
"원형/타원형": "ELLIPSE",
"17~20 문항 option값 변경":""
}
},
"17": {
"type": "clipping.size",
"ele": "//Layer//Shape[shape_type/@value='{option}']//op_points",
"option": "ELLIPSE",
"value": {
"width": 180,
"height": 180
},
"point": 3,
"desc": "레이어 쉐이프 X, Y 좌표를 가지고 너비, 높이 계산하여 정답 채점"
},
"18": {
"type": "exists",
"ele": "//Layer//Shape[shape_type/@value='{option}']/outline_peninfo/Width/@value",
"option": "ELLIPSE",
"value": "7",
"point": 3
},
"19": {
"type": "clipping.color",
"ele": "//Layer//Shape[shape_type/@value='{option}' and contains(draw_type/@value, 'Outline')]/primary_color/@value",
"option": "ELLIPSE",
"value": "FF3030",
"point": 3,
"desc": "채우기:secondary_color, 외곽선:primary_color"
},
"20": {
"type": "shadow",
"ele": "//Layer//Shape[shape_type/@value='{option}']",
"option": "ELLIPSE",
"value": {
"shadow": true,
"width": "5",
"distance": "3",
"blur": "1",
"angle": "320"
},
"point": 5,
"desc": "그림자 속성이 있는 경우 그림자 속성의 너비, 거리, 흐림 정도, 각도를 비교하여 정답 채점"
},
"21": {
"type": "none",
"ele": "",
"point": 0,
"desc": "기본설정"
},
"22": {
"type": "none",
"ele": "",
"point": 0,
"desc": "파일명 확인"
}
}
}