当前位置: 首页 > 知识库问答 >
问题:

复杂数组。地图[副本]

商飞翮
2023-03-14

我想做一个自动视频生成的东西。目前我这样做的方式是使用editly节点库,它需要一个对象。现在我想从一个文件夹中获取音乐/音频,然后我想获取每个文件的持续时间,这样我就可以动态地将其剪辑在一起。

问题是我想返回一个对象到Array.map函数,该对象在回调中被编辑。但是当我返回对象(在我的脑海中应该被编辑)时,它返回默认值。

以下是我目前的代码:

var editly = require("editly");
var duration = require("mp3d");
var fs = require("fs");

var idx = 0;

var editObj = {
    enableFfmpegLog: true,
    outPath: "./vids/"+idx+".mp4",
    width: 1280,
    height: 720,
    fps: 24,
    defaults: {
        transition: null
    },
    clips: [
        {
            layers: [
                {
                    type: "image",
                    path: "./bgs/"+idx+".jpg"
                }
            ]
        }
    ],
    audioTracks: fs.readdirSync("./audio/"+idx+"/").map((song, index, arr) => {
        if(index == 0) {
            var obj = { path: "./audio/"+idx+"/"+song, start: 0 };
            return obj;
        } else {
            var obj = { path: "./audio/"+idx+"/"+song };
            duration("./audio/"+idx+"/"+arr[index-1], (err, result) => {
                obj.start = Number((result / 1000).toFixed(0));
            });
            return obj;
        }
    })
};

(async function() {
    console.log(editObj);
    // await editly(editObj).then(console.log).catch(console.error);
})();

更新:以下是新的工作代码:

var editly = require("editly");
var duration = require("mp3d");
var fs = require("fs");

(async function() {
    var idx = 0;

    var editObj = {
        enableFfmpegLog: true,
        outPath: "./vids/"+idx+".mp4",
        width: 1280,
        height: 720,
        fps: 24,
        defaults: {
            transition: null
        },
        clips: [
            {
                layers: [
                    {
                        type: "image",
                        path: "./bgs/"+idx+".jpg"
                    }
                ]
            }
        ],
        audioTracks: await Promise.all(fs.readdirSync("./audio/"+idx+"/").map(async(song, index, arr) => {
            if(index == 0) {
                var obj = { path: "./audio/"+idx+"/"+song, start: 0 };
                return obj;
            } else {
                var obj = { path: "./audio/"+idx+"/"+song };
                await duration("./audio/"+idx+"/"+arr[index-1], (err, result) => {
                    obj.start = Number((result / 1000).toFixed(0));
                });
                return obj;
            }
        }))
    };

    console.log(editObj);
    // await editly(editObj).then(console.log).catch(console.error);
})();

共有1个答案

陆昊
2023-03-14

我相信发生的事情是在你的其他分支中,你在回调中变异了对象。在返回之前,它不会执行。因为js是异步的,所以您可能需要使用一个promise,并在返回之前等待突变的结果。

 类似资料:
  • 给定集合"foo",我们有字段"bar",看起来像这样: 如何查询字段“bar”上满足以下条件的所有“foo”:[14,18]中的“uid”=2和“mid”

  • 复杂的画图函数利用2-D线性转换能让你画出任意图形。这个功能与Adobe? PostScript 语言实现的功能很相似,在X和Win32上,在画线段之前所有的转换顶点都是用整数表示,这就限制了画图的精确性。如果要画比较精确的图形,最好用OpenGL来画。 void fl_push_matrix() void fl_pop_matrix() 保存和恢复当前的转换,堆栈的最大深度为4 void fl

  • 下面给出了问题陈述和解决方案。我无法理解解决方案背后的逻辑。 问题陈述: 给定一个数组包含n+1个整数,其中每个整数介于1和n之间,证明至少存在一个重复的数字。假设只有一个重复的数字,找到重复的一个。 首先,搜索空间是1到n之间的数字。每次我选择一个数字mid(它是中间的那个),并计算所有等于或小于mid的数字。如果计数大于mid,则搜索空间为[1 mid],否则为[mid+1n]。我这样做,直到

  • 5.1.2 图形是复杂数据 图形编程就是编写能创建和处理图形的程序。从一般的意义上说,图形也是数据,只不过与数值、字符串、列表等类型的数据相比,图形数据是非常复杂的数据。 首先,一个图形包含的信息是复杂的。例如,一个圆形需要用一个圆心和一个半径来定义。半径可以用一个简单的数值来表示,但圆心(平面上的一个点)却需要用两个数值型坐 标组成的元组来表示。这还只是大家在平面几何里认识的圆形,在实际的图形应

  • 主要内容:GWT 复杂组件 介绍,GWT 常用的复杂组件GWT 复杂组件 介绍 表单小部件允许用户与应用程序进行高级交互功能。每个 Complex 小部件都从 Widget 类继承属性,而 Widget 类又从 UIObject 继承属性。 小组件 描述 GWT UIObject类 此小部件包含文本,不会使用 <div> 元素将其解释为 HTML,从而使其以块布局显示。 GWT Widget类 此小部件可以包含 HTML 文本并使用 <div> 元素显

  • 我写了一个函数来寻找目标值在给定数组中应该插入的位置。我们假设数组有不同的值,并按升序排序。我的解必须是O(log N)时间复杂度 此代码的复杂性是否为O(log N)?