php-ffmpeg не может открыть файл статистики.Будет работать в терминале, если я удалю имя временного файла - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть простое приложение, которое пытается: 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 кадра в очереди на закрытиеПреобразование не удалось!

1 Ответ

0 голосов
/ 14 июля 2019

Попробуйте это .. Изменить:

$format = new FFMpeg\Format\Video\X264();

Кому:

$format = new FFMpeg\Format\Video\X264('libmp3lame');
...