拼接宽视频(例如6:4)与用手机(例如任何Android/iPhone 9:16)录制的垂直视频时的视频旋转问题.<



当手机录制垂直视频,需要与水平视频拼接时,所提供的输出包含垂直视频部分,并进行旋转。

原因:

  1. 这似乎是弹性转码器的局限性,忽略了手机在mp4文件头部编码的旋转参数。(我是在使用FFmpeg自带的FFprobe实用程序分析了几个视频后假设的)
  2. 我还注意到,如果我使用AWS控制台(Web UI)执行mp4到mp4转换以标准化mp4文件头,它会很好,但是当我用代码做同样的事情时,AWS应用旋转=0而不是我提供的值,即旋转=auto。如果我能从代码中正确地传递rotation=auto,我相信整个问题将得到解决。如果有人能指导我如何正确地传递旋转参数,那么这将是一个很大的帮助。下面是我使用的代码片段:
$transcoderService = app('ITranscoderService');
$inputs = [ 
[
'Key' => $this->media->getOriginal('media_url'),
]
];
$this->prepend && array_unshift($inputs, ['Key' => $this->prepend]);
$this->append && array_push($inputs, ['Key' => $this->append]);
$outputs = [
[
"Key" => $this->getOutputFilename(),
'Rotate' => 'auto',
"PresetId" =>  '1653583660869-5jx367',//'1653583311105-8tip2c'//'1351620000001-000020',//$this->presetId
],
];
$transcoderJob = $transcoderService->createJob([
'PipelineId' => config('aws.elastic_transcoder.pipeline_id'),
'Inputs' => $inputs,
'OutputKeyPrefix' => $this->getFileDirectory() ,
'Outputs' => $outputs,
]);

在使用Elastic Transcoder转换iPhone内容时,您可能会遇到用BT2020颜色空间格式化的内容处理问题。我建议您考虑使用AWS MediaConvert服务。

在与AWS文档进行了一番斗争之后,我确实找到了解决方案。他们没有指出,即使我想要默认值(即auto),我也必须传递所有输入参数,因为我认为当没有提供值时,单词autodefault应该自动视为真。日期:2022年10月20日

解决方案:

除了每个输入,我们必须明确地告诉AWS弹性转码器,我们想要使用'auto'FrameRate,Resolution,AspectRatio,InterlacedContainer,所以它使用这些参数从给定文件的元。在我的例子中是:

$inputs = [ 
[
'Key' => $this->media->getOriginal('media_url'),
'FrameRate' => 'auto',
'Resolution' => 'auto',
'AspectRatio' => 'auto',
'Interlaced' => 'auto',
'Container' => 'auto'
]
];

最新更新