织梦如何调用视频缩略图?

99ANYc3cd6
预计阅读时长 23 分钟
位置: 首页 织梦建站 正文

使用官方的“远程图片本地化”功能(最推荐,最稳定)

这是织梦CMS内置的、最标准且最稳定的方法,它的工作原理是:当你在后台编辑文章时,如果视频地址是外部的(例如来自其他网站的视频),织梦可以自动将视频的封面图(如果网站支持)或者视频的第一帧下载并保存到你本地服务器,然后生成一个缩略图。

织梦调用视频缩略图
(图片来源网络,侵删)

操作步骤:

  1. 开启远程图片本地化功能:

    • 登录织梦后台,进入“系统” -> “系统基本参数”。
    • 在左侧菜单选择“核心设置”。
    • 找到并设置以下两个选项:
      • 远程站点图片是否本地化:设置为“是”。
      • 远程图片目录:设置一个存放远程图片的目录,/uploads/allimg/remote/
    • 点击“保存”按钮。
  2. 中正确插入视频:

    • 在后台发布或编辑文章时,不要直接在内容里粘贴视频代码。
    • 使用织梦后台的“插入/修改视频”功能,通常在编辑器工具栏上会有一个类似“影片”或“视频”的图标。
    • 点击该图标,会弹出一个对话框,你需要填写:
      • 视频地址:输入完整的视频文件URL(可以是本地路径,也可以是远程URL)。
      • 视频尺寸:设置视频的宽度和高度。
      • 自动播放:根据需要选择。
    • 点击“确定”后,织梦会自动生成一段标准的HTML5视频标签<video src="..."></video>,并自动为你提取和生成缩略图。
  3. 在模板中调用缩略图:

    织梦调用视频缩略图
    (图片来源网络,侵删)
    • 当你使用上述方法插入视频后,织梦会像处理普通图片一样,为这个视频生成一个缩略图,并将其存储在数据库的litpic字段中。
    • 不需要修改任何模板代码,直接使用标准的标签即可调用:
      {dede:arclist row='10' titlelen='30'}
      <li>
          <a href="[field:arcurl/]">
              <img src="[field:litpic/]" alt="[field:title/]" />
          </a>
          <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
      </li>
      {/dede:arclist}

      [field:litpic/] 会自动获取到为视频生成的缩略图地址。

优点:

  • 官方支持,稳定可靠,不会因为织梦版本更新而失效。
  • 自动化程度高,对用户(编辑文章的人)非常友好。
  • 生成的缩略图已保存在本地,访问速度快。

缺点:

  • 仅适用于远程视频或通过后台“插入视频”功能处理的视频,如果你手动在内容里粘贴了视频代码,此方法无效。

使用自定义函数或插件(功能强大,适合高级用户)

如果你需要对视频缩略图进行更精细的控制,或者需要处理本地服务器上的视频文件,可以采用自定义函数的方式。

原理: 通过编写一个PHP函数,利用FFmpeg(一个强大的音视频处理工具)来截取视频的第一帧作为缩略图,然后在模板中调用这个函数。

操作步骤:

  1. 服务器环境准备:

    • 你的服务器必须安装了 FFmpeg,大多数Linux服务器(如CentOS, Ubuntu)都可以通过yumapt-get安装,虚拟主机用户需要联系主机商确认是否支持。
    • 确保PHP有权限执行FFmpeg命令。
  2. 编写自定义函数:

    • 在织梦的/include/extend.func.php文件中(如果此文件不存在,请自行创建),添加以下PHP函数:
    /**
     * 获取视频缩略图
     * @param string $videoUrl 视频文件路径(本地绝对路径或远程URL)
     * @param string $savePath 缩略图保存路径(本地绝对路径)
     * @param int $width 缩略图宽度
     * @param int $height 缩略图高度
     * @return string 返回缩略图的URL地址,如果失败则返回默认图片
     */
    function getVideoThumbnail($videoUrl, $savePath, $width = 320, $height = 240) {
        // 1. 检查FFmpeg是否可用
        if (!function_exists('exec')) {
            return $videoUrl; // 或者返回一个默认图片
        }
        // 2. 如果是远程URL,先下载到临时目录
        $isRemote = strpos($videoUrl, 'http') === 0;
        $tempVideoPath = '';
        if ($isRemote) {
            $tempVideoPath = tempnam(sys_get_temp_dir(), 'video_');
            if (!copy($videoUrl, $tempVideoPath)) {
                return $videoUrl; // 下载失败
            }
            $videoPathToUse = $tempVideoPath;
        } else {
            $videoPathToUse = $videoUrl;
        }
        // 3. 确保保存目录存在
        if (!is_dir(dirname($savePath))) {
            mkdir(dirname($savePath), 0777, true);
        }
        // 4. 构建FFmpeg命令,截取视频第1秒的图像
        $command = "ffmpeg -i \"{$videoPathToUse}\" -ss 00:00:01 -vframes 1 -s {$width}x{$height} \"{$savePath}\" 2>&1";
        // 5. 执行命令
        exec($command, $output, $return_val);
        // 6. 清理临时文件
        if ($isRemote && file_exists($tempVideoPath)) {
            unlink($tempVideoPath);
        }
        // 7. 如果命令执行成功且文件存在,则返回缩略图路径
        if ($return_val == 0 && file_exists($savePath)) {
            // 将本地路径转换为网站可访问的URL
            $saveDir = dirname($savePath);
            $relativePath = str_replace(DEDEROOT, '', $saveDir);
            $thumbnailUrl = str_replace('\\', '/', $relativePath) . '/' . basename($savePath);
            return $thumbnailUrl;
        }
        // 8. 失败时返回视频文件本身作为封面(或其他默认图)
        return $videoUrl; 
    }
  3. 在文章模型中增加字段:

    • 在后台“核心” -> “内容模型管理” -> “普通文章” -> “字段管理”中,增加一个新字段,video_path,用于存储视频文件的地址。
  4. 修改模板文件:

    • 在需要调用视频缩略图的模板(如arclist.htm)中,使用php标签来调用我们刚刚写的函数。
    {dede:arclist row='10' titlelen='30'}
    <li>
        <!-- 假设你有一个自定义字段 video_path 存储视频地址 -->
        [field:id runphp='yes']
            $aid = @me;
            $row = $GLOBALS['dsql']->GetOne("SELECT video_path FROM `#@__addonarticle` WHERE aid = $aid");
            if($row['video_path']){
                // 定义缩略图保存路径
                $savePath = DEDEROOT . '/uploads/video_thumbs/' . $aid . '.jpg';
                // 调用自定义函数
                $thumbUrl = getVideoThumbnail($row['video_path'], $savePath, 300, 200);
                @me = $thumbUrl;
            } else {
                @me = '/images/default_thumb.jpg'; // 默认图片
            }
        [/field:id]
        <a href="[field:arcurl/]">
            <!-- 使用动态生成的缩略图地址 -->
            <img src="[field:id function='getVideoThumbnail(@me, "D:/wwwroot/your_site/uploads/video_thumbs/" . @me . ".jpg", 300, 200)'/]" alt="[field:title/]" />
        </a>
        <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    </li>
    {/dede:arclist}

    注意: 上面模板中的PHP调用方式比较复杂,更清晰的方式是在extend.func.php里再封装一个更简单的模板调用函数,

    // 在 extend.func.php 中添加
    function GetVideoThumb($aid, $videoPath) {
        if(empty($videoPath)) return '/images/default.jpg';
        $savePath = DEDEROOT . '/uploads/video_thumbs/' . $aid . '.jpg';
        return getVideoThumbnail($videoPath, $savePath, 300, 200);
    }

    然后在模板中这样调用:

    <img src="{dede:field.id function='GetVideoThumb(@me, @row["video_path"])'/}" alt="[field:title/]" />

优点:

  • 功能极其强大,可以处理本地和远程视频,并可自定义缩略图尺寸。
  • 不依赖外部网站,完全自主可控。

缺点:

  • 技术门槛高,需要修改代码,对PHP和服务器环境有要求。
  • 服务器必须安装FFmpeg,增加了服务器维护成本。
  • 每次调用都会执行FFmpeg命令,如果并发量大可能会影响服务器性能。

使用第三方织梦视频插件(简单快捷,但依赖第三方)

网上有很多专门为织梦开发的视频插件,它们通常集成了视频播放和缩略图提取功能。

操作步骤:

  1. 寻找并下载插件:

    • 在织梦官方论坛、DedeCMS吧或其他CMS资源网站搜索“织梦 视频插件”、“织梦 视频模型”等关键词。
    • 选择一个评价好、更新及时的插件下载。
  2. 安装插件:

    按照插件的说明文档进行安装,通常包括上传文件、导入数据表、在后台启用插件等步骤。

  3. 使用插件功能:

    • 插件通常会创建一个新的文章模型(如“视频模型”)。
    • 在发布文章时,选择这个视频模型,然后按照插件指引上传视频或填写视频地址,插件会自动处理缩略图。
    • 插件会提供专门的标签供你在模板中调用,例如{dede:videolist}等。

优点:

  • 安装使用简单,对普通用户友好,无需编写代码。
  • 功能通常比较完善,可能包含视频广告、播放器样式等附加功能。

缺点:

  • 依赖第三方,如果插件作者停止更新,可能会出现兼容性问题。
  • 插件本身可能存在安全漏洞,需要选择信誉好的来源。
  • 可能会带有一些你不需要的功能或广告。

总结与建议

方法 优点 缺点 推荐场景
远程图片本地化 官方支持,稳定,自动化高 仅适用于后台插入视频功能 绝大多数网站的首选,特别是内容编辑人员不熟悉技术的情况下。
自定义函数 功能强大,完全可控 技术门槛高,服务器要求高 对视频处理有特殊需求(如处理本地视频文件),且具备开发能力的团队。
第三方插件 安装简单,功能集成 依赖第三方,可能有安全风险 想快速实现功能,且愿意承担第三方插件带来的风险。

对于绝大多数用户,我强烈推荐你首先尝试方法一,它是最符合织梦设计理念、最省心省力的解决方案,只有在方法一无法满足你的需求时,再考虑方法二或方法三。

-- 展开阅读全文 --
头像
C语言floating是什么?浮点数如何使用?
« 上一篇 04-19
dede怎么添加栏目
下一篇 » 04-19

相关文章

取消
微信二维码
支付宝二维码

目录[+]