2014-03-17 2 views
4

Видео может содержать метаинформацию о ориентации камеры. Например, iPhone и другие телефоны устанавливают этот флаг, если вы включаете устройство. Проблема в том, что некоторые игроки читают эту информацию и соответственно поворачивают видео, другие игроки этого не делают.ffmpeg фиксирует ориентацию видео

Для исправления этого видео необходимо повернуть, а метаинформация должна быть установлена ​​правильно.

ли FFmpeg обеспечить исправление для этого, или я должен пройти нелегкий путь (Read rotation, поворот, установить мета-данных)

ответ

7

я пройти нелегкий путь:

$ffmpeg == "path/to/ffmpeg"; 
$output_file_full = "file/after/normal/conversion"; 

// get rotation of the video 
ob_start(); 
passthru($ffmpeg . " -i " . $output_file_full . " 2>&1"); 
$duration_output = ob_get_contents(); 
ob_end_clean(); 

// rotate? 
if (preg_match('/rotate *: (.*?)\n/', $duration_output, $matches)) 
{ 
    $rotation = $matches[1]; 
    if ($rotation == "90") 
    { 
     echo shell_exec($ffmpeg . ' -i ' . $output_file_full . ' -metadata:s:v:0 rotate=0 -vf "transpose=1" ' . $output_file_full . ".rot.mp4 2>&1") . "\n"; 
     echo shell_exec("mv $output_file_full.rot.mp4 $output_file_full") . "\n"; 
    } 
    else if ($rotation == "180") 
    { 
     echo shell_exec($ffmpeg . ' -i ' . $output_file_full . ' -metadata:s:v:0 rotate=0 -vf "transpose=1" ' . $output_file_full . ".rot2.mp4 2>&1") . "\n"; 
     echo shell_exec($ffmpeg . ' -i ' . $output_file_full . '.rot2.mp4 -metadata:s:v:0 rotate=0 -vf "transpose=1" ' . $output_file_full . ".rot.mp4 2>&1") . "\n"; 
     echo shell_exec("mv $output_file_full.rot.mp4 $output_file_full") . "\n"; 
    } 
    else if ($rotation == "270") 
    { 
     echo shell_exec($ffmpeg . ' -i ' . $output_file_full . ' -metadata:s:v:0 rotate=0 -vf "transpose=2" ' . $output_file_full . ".rot.mp4 2>&1") . "\n"; 
     echo shell_exec("mv $output_file_full.rot.mp4 $output_file_full") . "\n"; 
    } 
} 

я использовал некоторые уродливые временные файлы. Извини за это.

+0

eeeeshhhh это уверенно взломано. Рассмотрим вместо этого вместо метаданных как json: ffprobe -of json -show_streams your_video.file 2>/dev/null – deweydb

Смежные вопросы