dev-toolkit-cli 1.0.3 → 1.0.4
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.
- package/bin/lib/bash.js +18 -11
- package/bin/lib/bash.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/bash.ts +20 -12
package/bin/lib/bash.js
CHANGED
|
@@ -28,16 +28,19 @@ export async function check_dependencies(dependencies = globalDependencies) {
|
|
|
28
28
|
async function getBestEncoder() {
|
|
29
29
|
try {
|
|
30
30
|
const { stdout } = (await execAsync("ffmpeg -encoders"));
|
|
31
|
-
//
|
|
32
|
-
if (stdout.includes("h264_nvenc"))
|
|
33
|
-
return "h264_nvenc"; // NVIDIA
|
|
31
|
+
// Prioridade para AMD (Windows: amf | Linux: vaapi)
|
|
34
32
|
if (stdout.includes("h264_amf"))
|
|
35
|
-
return "h264_amf";
|
|
33
|
+
return "h264_amf";
|
|
34
|
+
if (stdout.includes("h264_vaapi"))
|
|
35
|
+
return "h264_vaapi";
|
|
36
|
+
// Outros hardwares
|
|
37
|
+
if (stdout.includes("h264_nvenc"))
|
|
38
|
+
return "h264_nvenc";
|
|
36
39
|
if (stdout.includes("h264_qsv"))
|
|
37
|
-
return "h264_qsv";
|
|
40
|
+
return "h264_qsv";
|
|
38
41
|
if (stdout.includes("h264_videotoolbox"))
|
|
39
|
-
return "h264_videotoolbox";
|
|
40
|
-
return "libx264"; // Fallback
|
|
42
|
+
return "h264_videotoolbox";
|
|
43
|
+
return "libx264"; // Fallback
|
|
41
44
|
}
|
|
42
45
|
catch {
|
|
43
46
|
return "libx264";
|
|
@@ -46,11 +49,15 @@ async function getBestEncoder() {
|
|
|
46
49
|
export async function ffmpeg_video_compress(input, output, resolution = "480p", forceResolution) {
|
|
47
50
|
const { w, h } = resolutionMapping[resolution];
|
|
48
51
|
const encoder = await getBestEncoder();
|
|
52
|
+
// No VA-API (Linux), o redimensionamento deve ser feito via hardware para máxima performance
|
|
53
|
+
let filter = forceResolution ? `scale=${w}:${h}` : `scale=-1:${h}`;
|
|
54
|
+
if (encoder === "h264_vaapi") {
|
|
55
|
+
// Adiciona upload para hardware se usar vaapi
|
|
56
|
+
filter = `format=nv12,hwupload,scale_vaapi=w=${forceResolution ? w : -1}:h=${h}`;
|
|
57
|
+
}
|
|
58
|
+
const vaapiOpts = encoder === "h264_vaapi" ? "-vaapi_device /dev/dri/renderD128" : "";
|
|
49
59
|
console.log("Compressing video using: ", encoder);
|
|
50
|
-
|
|
51
|
-
// Usamos -pix_fmt yuv420p para garantir compatibilidade universal.
|
|
52
|
-
const filter = forceResolution ? `-s ${w}x${h}` : `-filter:v scale=-1:${h}`;
|
|
53
|
-
return execAsync(`ffmpeg -i "${input}" ${filter} -c:v ${encoder} -pix_fmt yuv420p -acodec copy -y "${output}"`);
|
|
60
|
+
return execAsync(`ffmpeg ${vaapiOpts} -i "${input}" -vf "${filter}" -c:v ${encoder} -pix_fmt yuv420p -acodec copy -y "${output}"`);
|
|
54
61
|
}
|
|
55
62
|
// export async function ffmpeg_video_compress(
|
|
56
63
|
// input: string,
|
package/bin/lib/bash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/lib/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAc,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,EAAE,CAC3C,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;;YAChC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,MAAM,kBAAkB,GAAG,CAAC,QAAQ,CAAC,CAAC;AAEtC,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IAChD,OAAO,SAAS,CAAC,GAAG,UAAU,KAAK,CAAC;SACjC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,YAAY,GAAG,kBAAkB;IACxE,MAAM,oBAAoB,GAAG,EAAE,CAAC;IAEhC,KAAK,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAAE,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,cAAc,CACtB,CAAC,EACD,sBAAsB,EACtB,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACzD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,SAAS,CAAC,kBAAkB,CAAC,CAEtD,CAAC;QAEF,
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/lib/bash.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/lib/bash.ts
CHANGED
|
@@ -40,13 +40,16 @@ async function getBestEncoder(): Promise<string> {
|
|
|
40
40
|
stdout: string;
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
-
//
|
|
44
|
-
if (stdout.includes("
|
|
45
|
-
if (stdout.includes("
|
|
46
|
-
if (stdout.includes("h264_qsv")) return "h264_qsv"; // Intel
|
|
47
|
-
if (stdout.includes("h264_videotoolbox")) return "h264_videotoolbox"; // Apple Silicon
|
|
43
|
+
// Prioridade para AMD (Windows: amf | Linux: vaapi)
|
|
44
|
+
if (stdout.includes("h264_amf")) return "h264_amf";
|
|
45
|
+
if (stdout.includes("h264_vaapi")) return "h264_vaapi";
|
|
48
46
|
|
|
49
|
-
|
|
47
|
+
// Outros hardwares
|
|
48
|
+
if (stdout.includes("h264_nvenc")) return "h264_nvenc";
|
|
49
|
+
if (stdout.includes("h264_qsv")) return "h264_qsv";
|
|
50
|
+
if (stdout.includes("h264_videotoolbox")) return "h264_videotoolbox";
|
|
51
|
+
|
|
52
|
+
return "libx264"; // Fallback
|
|
50
53
|
} catch {
|
|
51
54
|
return "libx264";
|
|
52
55
|
}
|
|
@@ -61,17 +64,22 @@ export async function ffmpeg_video_compress(
|
|
|
61
64
|
const { w, h } = resolutionMapping[resolution];
|
|
62
65
|
const encoder = await getBestEncoder();
|
|
63
66
|
|
|
64
|
-
|
|
67
|
+
// No VA-API (Linux), o redimensionamento deve ser feito via hardware para máxima performance
|
|
68
|
+
let filter = forceResolution ? `scale=${w}:${h}` : `scale=-1:${h}`;
|
|
69
|
+
if (encoder === "h264_vaapi") {
|
|
70
|
+
// Adiciona upload para hardware se usar vaapi
|
|
71
|
+
filter = `format=nv12,hwupload,scale_vaapi=w=${forceResolution ? w : -1}:h=${h}`;
|
|
72
|
+
}
|
|
65
73
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
74
|
+
const vaapiOpts =
|
|
75
|
+
encoder === "h264_vaapi" ? "-vaapi_device /dev/dri/renderD128" : "";
|
|
76
|
+
|
|
77
|
+
console.log("Compressing video using: ", encoder);
|
|
69
78
|
|
|
70
79
|
return execAsync(
|
|
71
|
-
`ffmpeg -i "${input}" ${filter} -c:v ${encoder} -pix_fmt yuv420p -acodec copy -y "${output}"`,
|
|
80
|
+
`ffmpeg ${vaapiOpts} -i "${input}" -vf "${filter}" -c:v ${encoder} -pix_fmt yuv420p -acodec copy -y "${output}"`,
|
|
72
81
|
);
|
|
73
82
|
}
|
|
74
|
-
|
|
75
83
|
// export async function ffmpeg_video_compress(
|
|
76
84
|
// input: string,
|
|
77
85
|
// output: string,
|