【问题标题】:Node.js using amazon transcoder to format video / audio filesNode.js 使用亚马逊转码器来格式化视频/音频文件
【发布时间】:2020-07-24 20:41:33
【问题描述】:

我的目标是确保上传到我的应用程序的所有视频都是正确的格式,并且它们的格式适合最小尺寸。

我在使用 ffmpeg 之前这样做了,但是我最近将我的应用程序移动到了亚马逊服务器。

这让我可以选择使用Amazon Elastic Transcoder

但是从界面上看,我无法设置自动作业来查找视频或音频文件并进行转换。

为此,我一直在查看他们的 SDK / api 参考,但我不太确定如何在我的应用程序中使用它。

我的问题是,有没有人成功地在node.js 开始转码工作,并且知道如何将视频从一种格式转换为另一种格式和/或降低比特率?如果有人可以通过一些示例说明这可能如何工作,我将不胜感激。

【问题讨论】:

    标签: javascript node.js amazon-web-services


    【解决方案1】:

    但是从界面上看我无法设置 查找视频或音频文件并进行转换的自动作业。

    Node.js SDK 不支持它,但您可以执行以下操作:如果您将视频存储在 S3 中(如果不将它们移动到 S3,因为弹性转码器使用 S3)您可以在 S3 上运行 Lambda 函数 putObject 触发由 AWS 提供。

    http://docs.aws.amazon.com/lambda/latest/dg/with-s3.html

    我的问题是,有没有人成功开始在 node.js 并且知道如何将视频从一种格式转换为另一种格式 /或向下设置比特率?如果有人,我将不胜感激 可以通过一些例子来指出我正确的方向 可能会起作用。

    我们使用 AWS 进行带节点的视频转码没有任何问题。找出每个参数很费时间,但我希望这几行可以帮助你:

    const aws = require('aws-sdk');
    
    aws.config.update({
      accessKeyId: config.AWS.accessKeyId,
      secretAccessKey: config.AWS.secretAccessKey,
      region: config.AWS.region
    });
    
    var transcoder = new aws.ElasticTranscoder();
    
    let transcodeVideo = function (key, callback) {
        // presets: http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/system-presets.html
        let params = {
          PipelineId: config.AWS.transcode.video.pipelineId, // specifies output/input buckets in S3 
          Input: {
            Key: key,
          },
          OutputKeyPrefix: config.AWS.transcode.video.outputKeyPrefix, 
          Outputs: config.AWS.transcode.video.presets.map(p => {
            return {Key: `${key}${p.suffix}`, PresetId: p.presetId};
          })
        };
    
        params.Outputs[0].ThumbnailPattern = `${key}-{count}`;
        transcoder.createJob(params, function (err, data) {
          if (!!err) {
            logger.err(err);
            return;
          }
          let jobId = data.Job.Id;
          logger.info('AWS transcoder job created (' + jobId + ')');
          transcoder.waitFor('jobComplete', {Id: jobId}, callback);
        });
      };
    

    一个示例配置文件:

    let config = {
      accessKeyId: '',
      secretAccessKey: '',
      region: '',
      videoBucket: 'blabla-media',
      transcode: {
        video: {
          pipelineId: '1450364128039-xcv57g',
          outputKeyPrefix: 'transcoded/', // put the video into the transcoded folder
          presets: [ // Comes from AWS console
            {presetId: '1351620000001-000040', suffix: '_360'},
            {presetId: '1351620000001-000020', suffix: '_480'}
          ]
        }
      }
    };
    

    【讨论】:

    • 非常感谢您的回复。您能否提供一些见解:config.AWS.transcode.video.outputKeyPrefix AND config.AWS.transcode.video 设置为?
    • @MarcRasmussen 我更新了我的答案。我希望它有帮助。 :)
    • 救命稻草这工作 100% 我喜欢你对预设数组所做的事情。
    • 我在哪里可以获得 AWS 中的“secretAccessKey”,我去了右上角的帐户菜单(上面有我的名字)然后子菜单:安全凭证,在那个“访问密钥(访问密钥 ID 和秘密访问密钥)”选项可用,但我只得到 Created |访问密钥 ID |上次使用 |上次使用地区 |上次使用服务 |状态 |操作 ** 没有可用的秘密访问密钥,只有可用的访问密钥 ID。你能告诉我在哪里可以找到它吗?
    • 您可以在这里找到更多信息:aws.amazon.com/blogs/security/…
    【解决方案2】:

    如果你想生成主播放列表,你可以这样做。 “.ts”文件无法通过 hls 播放器播放。生成“.m3u8”文件

    async function transcodeVideo(mp4Location, outputLocation) {
    let params = {
        PipelineId: elasticTranscoderPipelineId,
        Input: {
            Key: mp4Location,
            AspectRatio: 'auto',
            FrameRate: 'auto',
            Resolution: 'auto',
            Container: 'auto',
            Interlaced: 'auto'
        },
        OutputKeyPrefix: outputLocation + "/",
        Outputs: [
            {
                Key: "hls2000",
                PresetId: "1351620000001-200010",
                SegmentDuration: "10"
            },
            {
                Key: "hls1500",
                PresetId: "1351620000001-200020",
                SegmentDuration: "10"
            }
            ],
        Playlists: [
            {
                Format: 'HLSv3',
                Name: 'hls',
                OutputKeys: [
                    "hls2000",
                    "hls1500"
                ]
            },
        ],
    };
    
    let jobData = await createJob(params);
    return jobData.Job.Id;
    
    }
    
    async function createJob(params) {
    return new Promise((resolve, reject) => {
        transcoder.createJob(params, function (err, data) {
            if(err) return reject("err: " + err);
            if(data) {
                return resolve(data);
            }
        });
    });
    

    }

    【讨论】:

      猜你喜欢
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2014-07-02
      • 1970-01-01
      • 2015-09-24
      相关资源
      最近更新 更多