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 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
- // Lista de prioridade de encoders de hardware para H.264
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"; // AMD
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"; // Intel
40
+ return "h264_qsv";
38
41
  if (stdout.includes("h264_videotoolbox"))
39
- return "h264_videotoolbox"; // Apple Silicon
40
- return "libx264"; // Fallback para CPU
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
- // Nota: Encoders de GPU não suportam todos os mesmos parâmetros de CPU.
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,
@@ -1 +1 @@
1
- {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/lib/bash.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/lib/bash.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dev-toolkit-cli",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "repository": "https://github.com/daviinacio/dev-toolkit",
5
5
  "author": "Davi Inácio <aazz6850@gmail.com>",
6
6
  "license": "MIT",
package/src/lib/bash.ts CHANGED
@@ -40,13 +40,16 @@ async function getBestEncoder(): Promise<string> {
40
40
  stdout: string;
41
41
  };
42
42
 
43
- // Lista de prioridade de encoders de hardware para H.264
44
- if (stdout.includes("h264_nvenc")) return "h264_nvenc"; // NVIDIA
45
- if (stdout.includes("h264_amf")) return "h264_amf"; // AMD
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
- return "libx264"; // Fallback para CPU
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
- console.log("Compressing video using: ", encoder);
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
- // Nota: Encoders de GPU não suportam todos os mesmos parâmetros de CPU.
67
- // Usamos -pix_fmt yuv420p para garantir compatibilidade universal.
68
- const filter = forceResolution ? `-s ${w}x${h}` : `-filter:v scale=-1:${h}`;
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,