Видео, конвертированное с помощью avconv, неправильно вращается

Следующий PHP-код используется для получения видеофайла с использованием библиотеки avconv и его поворота при необходимости — однако по какой-то причине у меня возникает проблема с видео, которые генерируются с использованием этого всегда кода, неправильно их вращают (например, записанное видео в портретном / вертикальном режиме горизонтальное положение «сбоку» — кто-нибудь может подсказать, почему это так?

// остаток кода выше …

$newTmpName = $tempPath . ".mp4";
$transposition = null;
$rotation = shell_exec("mediainfo " . escapeshellarg($tempPath) . " 2>&1 | grep Rotation");

$sideways = false;

if ($rotation) {
if (strpos($rotation, "270") !== false) {
$tranposition = "tranpose=2";
$sideways = true;
} else if (strpos($rotation,"180") !== false) {
$transposition = "transpose=1, transpose=1";
} else if (strpos($rotation, "90") !== false) {
$transposition = "transpose=1";
$sideways = true;
}
}

$dimensions = null;
$dimensionInfo = shell_exec("avprobe " . escapeshellarg($tempPath) . " 2>&1 | grep Stream | grep Video");
preg_match("/[0-9]{2,4}x[0-9]{2,4}/", $dimensionInfo, $matches);

if (count($matches)) {
$maxVideoDimension = 1024;
$dimensionInfo = explode('x', $matches[0]);

if ($dimensionInfo[0] >= $dimensionInfo[1]) {
if ($dimensionInfo[0] > $maxVideoDimension) {
$ratio = $maxVideoDimension / $dimensionInfo[0];
$height = $dimensionInfo[1] * $ratio;

if ($height % 2 == 1) $height++;

if ($sideways) {
$dimensions = intval($height) . "x" . $maxVideoDimension;
} else {
$dimensions = $maxVideoDimension . "x" . intval($height);
}
}
} else {
if ($dimensionInfo[1] > $maxVideoDimension) {
$ratio = $maxVideoDimension / $dimensionInfo[1];
$width = $dimensionInfo[0] * $ratio;

if ($width % 2 == 1) $width++;
if ($sideways) {
$dimensions = $maxVideoDimension . 'x' . intval($width);
} else {
$dimensions = intval($width) . 'x' . $maxVideoDimension;
}
}
}
}

exec("avconv -i " . escapeshellarg($tempPath) . " -strict experimental  -q:v 1 -threads 2 -acodec copy" . ($dimensions ? " -s $dimensions " : " ") . "-r 30" . ($transposition ? " -vf $transposition " : " ") . escapeshellarg($newTmpName) . " 2>&1", $convResult, $convCode);

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector