У меня есть простое приложение, которое пытается: 1) повернуть видео со значением поворота 2) перекодировать видео HEVC, чтобы они воспроизводились в Chrome (пока Chrome не поддерживает HEVC) 3) сшить несколько результатов вместе.
В настоящее время я занимаюсь локальной разработкой, и в процессе тестирования я пытаюсь просканировать текущий каталог на наличие некоторых примеров mp4, которые у меня есть.Это задыхается от самого первого.Вот код:
<?PHP
$files1 = scandir('./');
foreach ($files1 as $file) {
$fileinfo = new SplFileInfo($file);
$extn = $fileinfo->getExtension();
if ($extn == 'mp4'){
fixVideo($file);
}
}
// FUNCTIONS
function fixVideo($file) {
$config = array(
'ffmpeg.binaries' => '/usr/local/bin/ffmpeg',
'ffprobe.binaries' => '/usr/local/bin/ffprobe',
'timeout' => 3600, // The timeout for the underlying process
'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use
);
$resultFile = 'FIXED_'.$file;
// create the ffmpeg object
$ffmpeg = FFMpeg\FFMpeg::create($config, null);
// open video file
$video = $ffmpeg->open($file);
// get the first video stream
$videostream = $ffmpeg->getFFProbe()
->streams($file)
->videos()
->first();
//echo "<pre>";print_r($videostream);
if (!$videostream instanceof FFMpeg\FFProbe\DataMapping\Stream) {
throw new \Exception('No stream given');
} else {
echo "<video src='$file' width='100'></video><br>";
echo "$file<br>";
if ($videostream->has('tags')) {
//echo "has tags<BR>";
// MUST WE ROTATE?
$tags = $videostream->get('tags');
if (isset($tags['rotate'])) {
echo "has rotate" . $tags['rotate'] . "<BR>" ;
if ($tags['rotate'] != 0) {
echo "rotate not 0<BR>";
switch($tags['rotate']) {
case 270:
$angle = FFMpeg\Filters\Video\RotateFilter::ROTATE_270;
break;
case 180:
$angle = FFMpeg\Filters\Video\RotateFilter::ROTATE_180;
break;
case 90:
$angle = FFMpeg\Filters\Video\RotateFilter::ROTATE_90;
break;
}
$video->filters()
->rotate($angle); echo "rotating<br>";
} // if ($tags['rotate']
// MUST WE REENCODE TO H.264?
if (isset($tags['encoder'])) {
echo "encoding: " . $tags['encoder'];
}
$format = new FFMpeg\Format\Video\X264();
$format->setAudioCodec("aac");
$video->save($format,$resultFile );
} // if (isset($tags['rotate']
} // if ($videostream->has('tags')
echo "<BR><BR>";
} // if $videostream instanceof
}//function
?>
Когда я запускаю это в браузере, я получаю:
appL.mp4
имеет rotate0
кодировка: HEVC
Неустранимая ошибка: Uncaught Alchemy \ BinaryDriver \ Exception \ ExecutionFailureException: ffmpeg не удалось выполнить команду '/ usr / local / bin / ffmpeg' '-y' '-i' 'appL.mp4''-threads' '12' '-vcodec' 'libx264' '-acodec' 'libmp3lame' '-b: v' '1000k' '-refs' '6' '-coder' '1' '-sc_threshold' '40'' -flags '' + loop '' -me_range '' 16 '' -subq '' 7 '' -i_qfactor '' 0.71 '' -qcomp '' 0.6 '' -qdiff '' 4 '' -trellis '' 1'' -b: a '' 128k '' -pass '' 1 '' -passlogfile '' / var / tmp / ffmpeg-pass5ba267bb96d0abvdgk / pass-5ba267bb96e01 '' FIXED_appL.mp4 'в / Users / [отредактировано] / test3 /vendor / alchemy / binary-driver / src / Alchemy / BinaryDriver / ProcessRunner.php: 100 Трассировка стека: # 0 /Users/[redacted]/test3/vendor/alchemy/binary-driver/src/Alchemy/BinaryDriver/ProcessRunner.php(72): Alchemy \ BinaryDriver \ ProcessRunner-> doExecutionFailure ('' / usr / local / bin ... ') # 1 / Пользователи / [отредактировано] / test3 / vendor / alchemy / binary-driver / src / Alchemy / BinaryDriver / AbstractBinary.php (209): Алхимия \ Bi in / Пользователи / [отредактировано] / test3 / vendor / php-ffmpeg / php-ffmpeg / src / FFMpeg / Media /AbstractVideo.php в строке 106
Когда я запускаю его в Терминале, я получаю:
MacBook-Pro: видео [отредактировано] $ '/ usr / local /bin / ffmpeg '' -y '' -i '' appL.mp4 '' -threads '' 12 '' -vcodec '' libx264 '' -acodec '' libmp3lame '' -b: v '' 1000k '' -refs'' 6 '-coder' '1' '-sc_threshold' '40' '-flags' '+ loop' '-me_range' '16' '-subq' '7' '-i_qfactor' '0.71' '-qcomp'' 0.6 '' -qdiff '' 4 '' -trellis '' 1 '' -b: a '' 128k '' -pass '' 1 '' -passlogfile '' / var / tmp / ffmpeg-pass5ba267bb96d0abvdgk / pass-5ba267bb96e01 '' FIXED_appL.mp4 'ffmpeg версии 4.0.2 Copyright (c) 2000-2018 разработчики FFmpeg, созданные с конфигурацией Apple LLVM версии 9.1.0 (clang-902.0.39.2): --prefix = / usr / local / Cellar /ffmpeg / 4.0.2 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc = clang --host-cflags = -I / System / Библиотека / Каркасы / JavaVM.framework / Версии / Текущая версия / Заголовки / --host-ldflags = --enable-gpl --enable-chromaprint --enable-ffplay --enable-frei0r --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopus --enable-librsvg --enable-librtmp --enable-librubberband --enable-libsnappy --enable-libsoxr -enable-libspeex --enable-libssh --enable-libtesseract --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp -enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg --enable-libzmq --enable-opencl --enable-videotoolbox --enable-openssl --enable-libsrt --enable-lzma -enable-libopenjpeg --disable-decoder = jpeg2000 --extra-cflags = -I / usr / local / Cellar / openjpeg / 2.3.0 / include / openjpeg-2.3 --enable-несвободный libavutil 56. 14.100 / 56. 14.100 libavcodec 58. 18.100 / 58. 18.100 libavformat 58. 12.100 / 58. 12.100 libavdevice 58. 3.100 / 58. 3.100 libavfilter 7. 16.100 / 7. 16.100 libavresample 40. 0 / 4. 0. 0 libswscale 5. 1.100 / 5. 1.100 libswresample 3. 1.100 / 3. 1.100 libpostproc 55. 1.100 / 55. 1.100 Вход № 0, mov, mp4, m4a, 3gp, 3g2, mj2,из 'appL.mp4': Метаданные:major_brand: qt
minor_version: 0 совместимые_бренды: qt
creation_time: 2018-09-17T16: 01: 54.000000Z Длительность: 00: 00: 03.30, запуск: 0,000000, битрейт: 4574 кбит / с Поток # 0: 0(und): Видео: hevc (Main) (hvc1 / 0x31637668), yuv420p (tv, bt709), 960x540, 4459 кбит / с, 29,97 к / с, 29,97 тб, 600 тбн, 600 тбк (по умолчанию) Метаданные: повернуть: 0 время создания: 2018-09-17T16: 01: 54.000000Z имя обработчика: Кодировщик основного носителя данных: HEVC Дополнительные данные: displaymatrix: поворот на -0,00 градусов Поток # 0: 1 (und): Аудио: aac (LC) (mp4a / 0x6134706D), 44100 Гц, моно, fltp, 98 кбит / с (по умолчанию) Метаданные: creation_time: 2018-09-17T16: 01: 54.000000Z handler_name: Core Media Data Handler Отображение потока: Поток № 0: 0 -> # 0: 0 (hevc (нативный) -> h264 (libx264)) Поток # 0: 1 -> # 0: 1 (aac (нативный) -> mp3 (libmp3lame)) Нажмите [q], чтобы остановить, [?] для помощи [libx264 @ 0x7f89e0018600] использование возможностей процессора: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 [libx264 @ 0x7f89e0018600] ratecontrol_init: невозможно открыть статистикуfile Ошибка инициализации выходного потока 0: 0 - Ошибка при открытии кодировщика для выходного потока # 0: 0 - возможно, неверные параметры, такие как bit_rate, rate, width или height [libmp3lame @ 0x7f89e0019e00] 4 кадра в очереди на закрытиеПреобразование не удалось!