xvai-loi 0.1.80 → 0.1.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/co.txt +1 -1
  2. package/package.json +1 -1
  3. package/xvai-loi.js +64 -4
package/co.txt CHANGED
@@ -1 +1 @@
1
- xvaiLoi120014
1
+ xvaiLoi120041
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xvai-loi",
3
- "version": "0.1.80",
3
+ "version": "0.1.82",
4
4
  "description": "Loi dung video (Edit Video Tu Dong) nap vao tool Google Flow qua o cam engine/oCam.ts",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
package/xvai-loi.js CHANGED
@@ -9684,14 +9684,15 @@ function moNhanh(g, W4, H2, ve, r, them = "") {
9684
9684
  // flow-src/engine/khuon.ts
9685
9685
  var KHUON_TOPN = {
9686
9686
  ten: "Top N chi\u1EC1u s\xE2u (Captions)",
9687
- tram: { phut: 18.3, tyLe: 0.7, phan: [0.83, 0.81, 0.46], daiTV: 2.1, video: 0.33, nhanVat: ["Vietnamese people in a real everyday setting.", "Close-up of an object, hands or a place that shows the idea, no faces."] },
9688
- // cảnh trám / phút, % thời lượng, 3 phần đầu/giữa/cuối, độ dài trung vị (s), tỉ lệ clip động; nhanVat: xen kẽ ảnh có người / cận vật-tay-nơi (đối thủ trộn web, stock, 3D — B06-1027: toàn ảnh người → 'không thấy mặt' 12 % < 15)
9687
+ tram: { phut: 18.3, tyLe: 0.7, phan: [0.83, 0.81, 0.46], daiTV: 2.1, video: 0.33, nhanVat: ["Vietnamese people in a real everyday setting.", "Close-up of an object, hands or a place that shows the idea, no faces."], cheToiDa: 0.55, tranToiDa: 0.8, tranToiThieu: 0.5 },
9688
+ // cheToiDa: phần phim người nói bị CHE (ảnh / thẻ kính toàn khung) tối đa — máy đo B9 'không thấy mặt' ≈ 0,5–0,87 × che (ảnh có người vẫn tính thấy mặt) → 0,55 giữ B9 ≤ ~40 (D03-1041: che 60 %, B9 53 %); tranToiThieu: không cắt khi trám còn < 50 % (B2 ≥ 45) · tranToiDa: trám cả chia / thẻ tối đa (B2 45–80 %) · cảnh trám / phút, % thời lượng, 3 phần đầu/giữa/cuối, độ dài trung vị (s), tỉ lệ clip động; nhanVat: xen kẽ ảnh có người / cận vật-tay-nơi (đối thủ trộn web, stock, 3D — B06-1027: toàn ảnh người → 'không thấy mặt' 12 % < 15)
9689
9689
  chu: { phut: [8, 18], caoMin: 0.042 },
9690
9690
  // caoMin: nét chữ nhấn (kể cả dấu) / H — đối thủ trung vị 0,042 (đo tay 23 dòng); chữ bị ép ngang thấp hơn → 2 dòng
9691
9691
  icon: { phut: 11.5 },
9692
9692
  cat: { moi10s: [4, 6], manhNguoi: 1.2, heChu: 0 },
9693
9693
  // manhNguoi: mẩu người nói kẹp giữa 2 cảnh ngắn hơn thì lấp (trước 0,6 — VD-236); heChu: khe giữa 2 cảnh liền cùng có chữ (trước 0,06 → chớp 2 khung người nói = 2 cú cắt thừa; bàn thử 13 video 12/10 00:0x: 0,06 → 0 cắt TB 5,44 → 4,39/10 s, chồng chữ 0/13 — cảnh trước đã hết theo giờ PHIM nhờ bT)
9694
- nguoi: { phongToiDa: 1.8, matToiDa: 0.55 },
9694
+ nguoi: { phongToiDa: 1.8, matToiDa: 0.55, doiToiDa: 10 },
9695
+ // doiToiDa: bố cục DỜI người nói (thẻ/chia/tròn/tách nền) mỗi phút — đối thủ 15 / 88 s (P2 ×6, P3 ×3, P4 ×3, P7 ×3); mỗi lần dời = 1–2 cú đầu nhảy (A4 đối thủ 11,5/phút)
9695
9696
  // matToiDa: hộp đầu (tóc→cằm) cao hơn 0,55 H thì KHÔNG dùng ô người / chia (không vừa ô) // MỌI ô người (PIP, thẻ, chia) phóng khung gốc tối đa 1,8× (độ nét) — trước: PIP 1,6, thẻ 1,3 (B05-1027: thẻ hiện cả người nhỏ)
9696
9697
  lietKe: { xenKe: 2 },
9697
9698
  // video liệt kê: cứ thẻ bước thứ 2 → ảnh toàn khung + tiêu đề (đối thủ đổi kiểu, không lặp 1 khuôn thẻ)
@@ -13003,6 +13004,65 @@ function lapCuongMe(o) {
13003
13004
  });
13004
13005
  }
13005
13006
  }
13007
+ {
13008
+ const mn = +(globalThis.__manhNguoi ?? KHUON_TOPN.cat.manhNguoi), ds2 = () => sp.filter((x) => x.bo !== "phong").sort((p, q) => p.f - q.f);
13009
+ for (const [loai2, tran] of [[/^(anh|kinh)$/, KHUON_TOPN.tram.cheToiDa], [/^(anh|kinh|chia|card)$/, KHUON_TOPN.tram.tranToiDa]]) {
13010
+ let du = sp.filter((x) => loai2.test(String(x.bo))).reduce((s2, x) => s2 + x.d, 0) - tran * tong, vong2 = 0;
13011
+ while (du > 0.05 && vong2++ < 60 && sp.filter((x) => /^(anh|kinh|chia|card)$/.test(String(x.bo))).reduce((s2, x) => s2 + x.d, 0) > KHUON_TOPN.tram.tranToiThieu * tong + 0.3) {
13012
+ const L = ds2(), cat2 = L.filter((x) => loai2.test(String(x.bo)) && /^(anh|chia)$/.test(String(x.bo)) && !x.khoa && !x.dong && !x.doc && !x.ui && !x.hang && x.f >= 1).sort((p, q) => q.d - p.d);
13013
+ let lam = false;
13014
+ for (const x of cat2) {
13015
+ const nx = L[L.indexOf(x) + 1], het = nx ? nx.f : tong, giu2 = Math.max(1.6, x.d - du - (nx && het - (x.f + x.d) < mn ? mn - (het - (x.f + x.d)) : 0));
13016
+ const d2 = nx && het - (x.f + giu2) < mn ? het - mn - x.f : giu2;
13017
+ if (d2 >= 1.6 && x.d - d2 > 0.25) {
13018
+ ghiL("rut", x, "khuon tram tran: " + x.d.toFixed(2) + " -> " + d2.toFixed(2) + " s");
13019
+ du -= x.d - d2;
13020
+ x.d = +d2.toFixed(2);
13021
+ lam = true;
13022
+ break;
13023
+ }
13024
+ }
13025
+ if (!lam) {
13026
+ const bo4 = cat2.filter((x) => !String(x.chu || x.giant || "").trim()).sort((p, q) => q.d - p.d)[0];
13027
+ if (!bo4) break;
13028
+ ghiL("bo", bo4, "khuon tram tran: bo anh khong chu");
13029
+ du -= bo4.d;
13030
+ sp.splice(sp.indexOf(bo4), 1);
13031
+ }
13032
+ }
13033
+ }
13034
+ G4.__tramTran = 1;
13035
+ }
13036
+ {
13037
+ const doi = (x) => /^(card|chia|tron|cut)$/.test(String(x.bo)), D = sp.filter(doi).sort((p, q) => p.f - q.f), tranD = Math.floor(KHUON_TOPN.nguoi.doiToiDa * tong / 60);
13038
+ let nD = 0;
13039
+ const duoc = (x) => !x.ui && !x.doc && !x.hang && !x.dong && !x.tieuDoc && !x.khoa && x.f >= 3 && (x.bo === "chia" && x.ten && taiSan(x.ten) || x.bo === "card" && x.anhTren);
13040
+ while (D.length > tranD) {
13041
+ let j = -1, m = 1e9;
13042
+ for (let k = 0; k < D.length; k++) {
13043
+ const x2 = D[k];
13044
+ if (!duoc(x2)) continue;
13045
+ const g = Math.min(k > 0 ? x2.f - D[k - 1].f : 1e9, k + 1 < D.length ? D[k + 1].f - x2.f : 1e9);
13046
+ if (g < m) {
13047
+ m = g;
13048
+ j = k;
13049
+ }
13050
+ }
13051
+ if (j < 0) break;
13052
+ const x = D[j];
13053
+ ghiL("doi", x, "khuon nguoi.doiToiDa: " + x.bo + " \u2192 anh toan khung");
13054
+ if (x.bo === "card") {
13055
+ x.ten = x.anhTren;
13056
+ x.chu = x.tieu;
13057
+ x.chu2 = "";
13058
+ x.theAnh = 1;
13059
+ }
13060
+ x.bo = "anh";
13061
+ D.splice(j, 1);
13062
+ nD++;
13063
+ }
13064
+ G4.__doiNguoiBo = nD;
13065
+ }
13006
13066
  {
13007
13067
  const coC = (x) => x.bo !== "phong" && !!String(x.giant || x.chu || x.tieu || "").trim(), C2 = sp.filter(coC).sort((p, q) => p.f - q.f), tran = Math.floor(0.9 * KHUON_TOPN.chu.phut[1] * tong / 60);
13008
13068
  let nT = 0;
@@ -20913,7 +20973,7 @@ function datCauLenh(a) {
20913
20973
  on2 = true;
20914
20974
  window.addEventListener("message", async (ev) => {
20915
20975
  const d = ev.data;
20916
- if (!d || d.xvaiLoi120014 !== true) return;
20976
+ if (!d || d.xvaiLoi120041 !== true) return;
20917
20977
  const o = String(ev.origin || "");
20918
20978
  if (!(o.indexOf("https://flow.google.com") === 0 || o.indexOf("https://labs.google") === 0)) return;
20919
20979
  const tra = (kq) => {