将 AWS MediaConvert 作业模板输出到同一目录

问题描述

我正在尝试在 Amazon 的 MediaConvert 服务中设置一个作业,该服务会将我上传到 S3 存储桶的任何视频转换为流媒体友好格式。在大多数情况下,这似乎有效 - 我的应用每次上传视频时都会调用 API 来运行作业。

但是,为方便起见(为了更容易找到特定文件的输出),我想将输出文件放入找到输入文件的同一目录中。

有没有办法将作业模板的输出设置为相对于输入的路径?或者,是否可以覆盖输出目录而无需在 Java 代码中从头开始定义整个作业?

这是我在 Java API 中设置输入目录的方式:

CreateJobRequest request = CreateJobRequest.builder()
    .role(roleName)
    .jobTemplate("Process uploaded videos") // Matches a custom template I made in AWS
    .settings(JobSettings.builder()
        .inputs(Input.builder()
            .fileInput("s3://" + mConfig.bucket + "/" + mFolder + filename)
            .build())
        .build())
    .build();

指定输出路径的更新版本:

CreateJobRequest request = CreateJobRequest.builder()
    .role(MEDIACONVERT_ROLE)
    .jobTemplate("Process uploaded videos") // Matches a custom template I made in AWS
    .settings(JobSettings.builder()
        .inputs(Input.builder()
            .fileInput("s3://" + mConfig.bucket + "/" + mFolder + filename)
            .build())
        .outputGroups(OutputGroup.builder()
            .name("Streaming video") // Matches the name of the output group in the template
            .outputGroupSettings(OutputGroupSettings.builder()
                .type(OutputGroupType.FILE_GROUP_SETTINGS)
                .fileGroupSettings(FileGroupSettings.builder()
                    .destination("s3://" + mConfig.bucket + "/" + mFolder) // Put output in the same folder as the input
                    .build())
                .build())
            .build())
        .build())
    .build();

解决方法

AWS Elemental MediaConvert 中没有用于根据输入位置设置输出的相对路径的本机方法,但是您是对的,因为您可以覆盖模板中的参数,而无需从头开始定义整个作业.

例如,这是一个使用不引用预设的模板提交作业的 AWS CLI (boto3) JSON 示例。

注意:此模板包含一个输入数组对象(注意没有 FileURI 参数,您将在创建作业时添加)

{
  "Queue": "arn:aws:mediaconvert:us-west-2:111122223333:queues/Default","Name": "Test_MP4","Description":"Test MP4"
  "Settings": {
    "OutputGroups": [
      {
        "Name": "File Group","Outputs": [
          {
            "ContainerSettings": {
              "Container": "MP4","Mp4Settings": {
                "CslgAtom": "EXCLUDE","FreeSpaceBox": "EXCLUDE","MoovPlacement": "NORMAL"
              }
            },"VideoDescription": {
              "Width": 3840,"ScalingBehavior": "DEFAULT","Height": 2160,"VideoPreprocessors": {
                "Deinterlacer": {
                  "Algorithm": "INTERPOLATE","Mode": "DEINTERLACE","Control": "NORMAL"
                }
              },"TimecodeInsertion": "DISABLED","AntiAlias": "ENABLED","Sharpness": 50,"CodecSettings": {
                "Codec": "H_265","H265Settings": {
                  "InterlaceMode": "PROGRESSIVE","ParNumerator": 1,"NumberReferenceFrames": 3,"FramerateDenominator": 1001,"GopClosedCadence": 1,"AlternateTransferFunctionSei": "DISABLED","HrdBufferInitialFillPercentage": 90,"GopSize": 48,"Slices": 4,"GopBReference": "ENABLED","HrdBufferSize": 20000000,"SlowPal": "DISABLED","ParDenominator": 1,"SpatialAdaptiveQuantization": "ENABLED","TemporalAdaptiveQuantization": "ENABLED","FlickerAdaptiveQuantization": "DISABLED","Bitrate": 10000000,"FramerateControl": "SPECIFIED","RateControlMode": "CBR","CodecProfile": "MAIN_MAIN","Tiles": "ENABLED","Telecine": "NONE","FramerateNumerator": 24000,"MinIInterval": 0,"AdaptiveQuantization": "HIGH","CodecLevel": "LEVEL_5","SceneChangeDetect": "ENABLED","QualityTuningLevel": "MULTI_PASS_HQ","FramerateConversionAlgorithm": "DUPLICATE_DROP","UnregisteredSeiTimecode": "DISABLED","GopSizeUnits": "FRAMES","ParControl": "SPECIFIED","NumberBFramesBetweenReferenceFrames": 3,"TemporalIds": "DISABLED","SampleAdaptiveOffsetFilterMode": "ADAPTIVE"
                }
              },"AfdSignaling": "NONE","DropFrameTimecode": "ENABLED","RespondToAfd": "NONE","ColorMetadata": "INSERT"
            },"AudioDescriptions": [
              {
                "AudioTypeControl": "FOLLOW_INPUT","CodecSettings": {
                  "Codec": "AAC","AacSettings": {
                    "AudioDescriptionBroadcasterMix": "NORMAL","Bitrate": 160000,"CodecProfile": "LC","CodingMode": "CODING_MODE_2_0","RawFormat": "NONE","SampleRate": 48000,"Specification": "MPEG4"
                  }
                },"LanguageCodeControl": "FOLLOW_INPUT","AudioType": 0
              }
            ],"NameModifier": "_1"
          }
        ],"OutputGroupSettings": {
          "Type": "FILE_GROUP_SETTINGS","FileGroupSettings": {
            "Destination": "s3://myawsbucket/out/"
          }
        }
      }
    ],"AdAvailOffset": 0,"Inputs": [
      {
        "AudioSelectors": {
          "Audio Selector 1": {
            "Offset": 0,"DefaultSelection": "DEFAULT","ProgramSelection": 1
          }
        },"VideoSelector": {
          "ColorSpace": "FOLLOW"
        },"FilterEnable": "AUTO","PsiControl": "USE_PSI","FilterStrength": 0,"DeblockFilter": "DISABLED","DenoiseFilter": "DISABLED","TimecodeSource": "EMBEDDED"
      }
    ]
  }
}

以下 JSON 有效负载在输入上添加了一个输入和一个字幕选择器,并为输出添加了一个字幕轨道,并更改了输出文件的目标位置。

注意:您需要确保包含您的作业模板名称以及您希望服务承担的角色(即您在使用 IAM 设置中设置的内容)

{
  "Settings": {
    "OutputGroups": [
      {
        "Name": "File Group","Outputs": [
          {
          "CaptionDescriptions": [
              {
                "DestinationSettings": {
                  "DestinationType": "EMBEDDED"
                },"CaptionSelectorName": "Captions Selector 1","LanguageCode": "ENG"
              }
            ]
          }
        ],"FileGroupSettings": {
            "Destination": "s3://myawsbucket/newfolder/out/"
          }
        }
      }
    ],"TimecodeSource": "EMBEDDED","FileInput": "s3://myawsbucket/input/test.mp4","CaptionSelectors": {
          "Captions Selector 1": {
            "SourceSettings": {
              "SourceType": "SCC","FileSourceSettings": {
                "SourceFile": "s3://myawsbucket/input/Captions/SCC/test.scc"
              }
            }
          }
        }
      }
    ]
  },"JobTemplate": "Test_MP4","Role": "arn:aws:iam::111122223333:role/MediaConvertRole"
}

要仅更改目的地,您将使用此 JSON:

{
  "Settings": {
    "OutputGroups": [
      {
        "OutputGroupSettings": {
          "Type": "FILE_GROUP_SETTINGS","Inputs": [
      {
        "FileInput": "s3://myawsbucket/input/test.mp4"
      }
    ]
  },"Role": "arn:aws:iam::111122223333:role/MediaConvertRole"
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...