Update app.py
Browse files
app.py
CHANGED
|
@@ -669,7 +669,7 @@ function addMedia(name, type, url, filePath) {{
|
|
| 669 |
v.currentTime = 0.5;
|
| 670 |
// 메타데이터 로드 후 클립 추가
|
| 671 |
addClip(m);
|
| 672 |
-
console.log(
|
| 673 |
}};
|
| 674 |
|
| 675 |
v.onseeked = function() {{
|
|
@@ -686,7 +686,7 @@ function addMedia(name, type, url, filePath) {{
|
|
| 686 |
}};
|
| 687 |
|
| 688 |
v.onerror = function() {{
|
| 689 |
-
console.error(
|
| 690 |
m.loaded = true;
|
| 691 |
m.dur = 5;
|
| 692 |
renderLib();
|
|
@@ -705,11 +705,11 @@ function addMedia(name, type, url, filePath) {{
|
|
| 705 |
renderLib();
|
| 706 |
// 메타데이터 로드 후 클립 추가
|
| 707 |
addClip(m);
|
| 708 |
-
console.log(
|
| 709 |
}};
|
| 710 |
|
| 711 |
a.onerror = function() {{
|
| 712 |
-
console.error(
|
| 713 |
m.loaded = true;
|
| 714 |
m.dur = 5;
|
| 715 |
renderLib();
|
|
@@ -723,10 +723,10 @@ function addMedia(name, type, url, filePath) {{
|
|
| 723 |
renderLib();
|
| 724 |
// 이미지 로드 후 클립 추가
|
| 725 |
addClip(m);
|
| 726 |
-
console.log(
|
| 727 |
}};
|
| 728 |
img.onerror = function() {{
|
| 729 |
-
console.error(
|
| 730 |
m.loaded = true;
|
| 731 |
addClip(m);
|
| 732 |
}};
|
|
@@ -1365,10 +1365,12 @@ def process_files(files):
|
|
| 1365 |
|
| 1366 |
|
| 1367 |
def make_iframe(data):
|
| 1368 |
-
"""에디터 iframe 생성"""
|
| 1369 |
j = json.dumps(data, ensure_ascii=False)
|
| 1370 |
-
|
| 1371 |
-
|
|
|
|
|
|
|
| 1372 |
|
| 1373 |
|
| 1374 |
def export_mp4(export_json):
|
|
|
|
| 669 |
v.currentTime = 0.5;
|
| 670 |
// 메타데이터 로드 후 클립 추가
|
| 671 |
addClip(m);
|
| 672 |
+
console.log("[VideoEditor] Video loaded:", m.name, m.dur);
|
| 673 |
}};
|
| 674 |
|
| 675 |
v.onseeked = function() {{
|
|
|
|
| 686 |
}};
|
| 687 |
|
| 688 |
v.onerror = function() {{
|
| 689 |
+
console.error("[VideoEditor] Video load error:", m.name);
|
| 690 |
m.loaded = true;
|
| 691 |
m.dur = 5;
|
| 692 |
renderLib();
|
|
|
|
| 705 |
renderLib();
|
| 706 |
// 메타데이터 로드 후 클립 추가
|
| 707 |
addClip(m);
|
| 708 |
+
console.log("[VideoEditor] Audio loaded:", m.name, m.dur);
|
| 709 |
}};
|
| 710 |
|
| 711 |
a.onerror = function() {{
|
| 712 |
+
console.error("[VideoEditor] Audio load error:", m.name);
|
| 713 |
m.loaded = true;
|
| 714 |
m.dur = 5;
|
| 715 |
renderLib();
|
|
|
|
| 723 |
renderLib();
|
| 724 |
// 이미지 로드 후 클립 추가
|
| 725 |
addClip(m);
|
| 726 |
+
console.log("[VideoEditor] Image loaded:", m.name);
|
| 727 |
}};
|
| 728 |
img.onerror = function() {{
|
| 729 |
+
console.error("[VideoEditor] Image load error:", m.name);
|
| 730 |
m.loaded = true;
|
| 731 |
addClip(m);
|
| 732 |
}};
|
|
|
|
| 1365 |
|
| 1366 |
|
| 1367 |
def make_iframe(data):
|
| 1368 |
+
"""에디터 iframe 생성 - data URL로 이스케이프 문제 완전 회피"""
|
| 1369 |
j = json.dumps(data, ensure_ascii=False)
|
| 1370 |
+
html_content = get_editor_html(j)
|
| 1371 |
+
# base64 인코딩 후 data URL로 사용
|
| 1372 |
+
b64 = base64.b64encode(html_content.encode('utf-8')).decode('utf-8')
|
| 1373 |
+
return f'<iframe src="data:text/html;base64,{b64}" style="width:100%;height:700px;border:none;border-radius:10px"></iframe>'
|
| 1374 |
|
| 1375 |
|
| 1376 |
def export_mp4(export_json):
|