瀏覽代碼

node process_child spawn浅尝

kindring 2 年之前
父節點
當前提交
6563dc66f9
共有 1 個文件被更改,包括 56 次插入0 次删除
  1. 56 0
      js/node相关/操作命令行.md

+ 56 - 0
js/node相关/操作命令行.md

@@ -0,0 +1,56 @@
+# 命令行操作 `child_process`
+
+## 基础类 `spwan`
+### 输入参数
+1. `command` 要执行的命令
+2. `command params` 命令行后面携带的参数
+3. `options` 执行参数
+- `cwd` 执行命令的目录位置
+- `shell` 是否开启`shell`执行命令,在win下常用(据说)
+
+### 返回 spawn 对象
+1. `stdin` 程序标准输入
+> 需要继续深入研究.可处理用户输入
+2. `stdout` 程序标准输出
+3. `stderr` 程序标准错误
+一般程序`warning`级别的输出也会在`stderr`中进行输出,
+
+### 示例
+通过`nodejs`调用`ffmpeg`将`h264`文件制作封面与转码操作
+```js
+function videoToMp4Spawn(filePath,targetPath){
+    filePath = path.join(filePath);
+    // -i ${filePath} -y -f image2 -s 3 -vframes 1 ${targetPath}.jpg
+    let ffmpeg = process.spawn('ffmpeg',
+        ['-i',filePath,'-y','-f','image2','-ss','3','-vframes','1',`${targetPath}.jpg`,'-loglevel', 'error'])
+    ffmpeg.stdout.on('data', (data) => {
+        console.log(`stdout: ${data}`);
+    });
+    ffmpeg.stderr.on('data', (data) => {
+        console.log(`stderr: ${data}`);
+    });
+    ffmpeg.on('close', (code) => {
+        console.log(`--------------------\n\n\n`);
+        console.log(`child process exited with code ${code}`);
+        // 任务结束
+    });
+
+    let taransformFfmepg = process.spawn('ffmpeg',['-i',filePath,`${targetPath}.mp4`,'-loglevel', 'error'])
+    taransformFfmepg.stdout.on('data', (data) => {
+        console.log(`[taransformFfmepg] stdout: ${data}`);
+    });
+    taransformFfmepg.stderr.on('data', (data) => {
+        console.log(`[taransformFfmepg] stderr: ${data}`);
+    });
+    taransformFfmepg.on('close', (code) => {
+        console.log(`--------------------\n\n\n`);
+        console.log(`[taransformFfmepg] child process exited with code ${code}`);
+        // 任务结束
+    });
+}
+videoToMp4Spawn('./public/1.264','./public/r');
+```
+
+### 注意事项
+执行命令行程序时记得将程序输出级别调整成自己需要的`warn`或者`error`级别
+