Изменение / замена 1-й точки в каждом сгенерированном имени файла jpg из видео, чтобы остаться одной точкой - PullRequest
0 голосов
/ 18 марта 2019

мой сайт использует ffmpeg для создания эскиза jpg для каждого загружаемого видео.Код, приведенный ниже:

// get the videos uploaded
foreach ($videos as $video) {
    if ($profile_author_id == $userid || current_user_can('level_10')) {
        $imagebuttons = '<span class="edit-buttons"><span class="icon button-delete icon-cancel rad3"></span></span>';
    }

    echo '<div class="profile-video-thumb-wrapper"><div class="profile-img-thumb profile-video-thumb rad3"  id="'.$video->ID.'" style="background: url('.$video->guid.'.jpg) center no-repeat; background-size: cover;">';
    echo    $imagebuttons;

    if(get_post_meta($video->ID, 'processing', true) && !is_video_processing_running(get_post_meta($video->ID, 'processing', true))) {
        delete_post_meta($video->ID, 'processing');
        unlink(get_post_meta($video->ID, "original_file", true));
        delete_post_meta($video->ID, 'original_file');

    }
    $file_path = get_attached_file($video->ID);
    $file_path_thumb = $file_path.".jpg";
    if(!file_exists($file_path_thumb)) {
        $output = shell_exec("/usr/local/bin/ffmpeg -i $file_path");
        $videoresizeheight = get_option("videoresizeheight") ? get_option("videoresizeheight") : '400';
        $comd = "/usr/local/bin/ffmpeg -y -i \"$file_path\" -f mjpeg -vframes 1 -ss 00:00:03.000 -vf scale=".$videoresizeheight.":-1 \"$file_path_thumb\" 2>&1";
        shell_exec($comd);
    }

    if(get_post_meta($video->ID, 'processing', true)) {
        if ($profile_author_id == $userid || current_user_can('level_10')) {
            echo '<span class="video-processing rad3">'._d('this video is still processing',1269).'</span>';
            echo '<img data-original-url="'.get_template_directory_uri().'/i/video-placeholder.svg" class="mobile-ready-img rad3" alt="'.get_the_title().'" data-responsive-img-url="'.get_template_directory_uri().'/i/video-placeholder-mobile.svg" />';
        }
    } else {
        echo '<div id="'.preg_replace("/([^a-zA-Z0-9])/", "", $video->post_title).'" class="video-player-lightbox text-center hide" itemprop="video" itemscope itemtype="http://schema.org/VideoObject">';
        echo    '<meta itemprop="thumbnailUrl" content="'.$video->guid.'.jpg" />';
        echo    '<meta itemprop="contentURL" content="'.$video->guid.'" />';
        echo    '<video height="100%" width="100%" controls>';
        echo        '<source src="'.$video->guid.'" type="video/mp4">';
        echo        _d("Your browser does not support the video tag.",1270);
        echo    '</video> ';
        echo '</div>';

        echo '<a href="#'.preg_replace("/([^a-zA-Z0-9])/", "", $video->post_title).'" rel="profile-video">';
        echo    '<img src="'.$video->guid.'.jpg" class="hide" />';
        echo    '<img src="'.get_template_directory_uri().'/i/video-placeholder.svg" class="video-image-play" />';
        echo '</a>';
    }

    echo '<div class="clear"></div></div></div>'."\n";
}
if(count($videos) > 0) {
    echo '<div class="clear10"></div>';
}

В результате создается файл эскиза jpg для каждого загруженного видео;но проблема возникает, когда имя файла jpg включает точку, перенесенную из исходного видеофайла, например, я загружаю видео с именем video.mp4, это сгенерирует jpg-файл, вызывающий video.mp4.jpg.И это, мой сайт будет обрабатывать этот файл как не существует.

Теперь мне нужно найти решение, которое может сгенерировать правильное имя файла миниатюры, но при этом использовать теги WordPress, который меняет .mp4 на -mp4 при добавлении дополнительного расширения .jpg.

1 Ответ

0 голосов
/ 23 марта 2019

[после 2 дней работы над решением, наконец-то я нашел решение для своего использования, отлично работает для меня]

На $file_path_thumb я заменяюс

dirname($file_path).'/'.preg_replace("/\./","-",basename($file_path)).".jpg";

, таким образом, он становится

$file_path_thumb = dirname($file_path).'/'.preg_replace("/\./","-",basename($file_path)).".jpg";

. Это позволит только заменить лишнюю точку, перенесенную из исходного видеофайла, в разных видео расширениях.

затем, изменив остальную часть ссылки для отображения миниатюр, где

"'.$video->guid.'.jpg"

на

"'.dirname($video->guid).'/'.preg_replace("/\./","-",basename($video->guid)).'.jpg"

Пример: я загружаю видео с именем файла somevideo.mp4, и это не будет мешатьисходный файл с использованием ffmpeg, при создании миниатюрной фотографии для somevideo-mp4.jpg, а затем с отображением эскиза, указывающего на правильный сгенерированный файл jpg.

...