阿水的世界。

01月 06

批量压缩MP4文件

最近工作上有需求,需要批量将视频文件进行压缩,且保证视频的质量不能太糊。因此,我写了个使用FFmpeg批量压缩视频的批处理命令,直接将指定文件夹内所有的mp4文件进行压缩,并按照输入文件夹中的目录结构,在输出文件夹中形成转换后的文件。整体效果不错,录制的视频文件61GB,原始分辨率19201080,音频196kb/s,压缩后分辨率960540,音频96kb/s,文件大小1.85GB,且画面可接受,不太糊。具体代码如下:

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

rem 设置输入文件夹input和输出文件夹output,全用英文,路径中不能有空格
set "INPUT_DIR=D:\works\input\"
set "OUTPUT_DIR=D:\works\output\"


rem 如果输出文件夹不存在,则创建它
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"

rem 使用 /R 递归遍历所有子目录中的.mp4文件
for /R "%INPUT_DIR%" %%i in (*.mp4) do (
    rem 提取纯文件名和扩展名
    set "base_name=%%~ni"
    set "file_ext=%%~xi"
    rem 获取文件所在目录(去掉文件名)
    set "file_dir=%%~dpi"
    
    rem --- 核心:计算并创建对应的输出子目录 ---
    rem 计算相对于输入目录的路径,确保路径正确替换
    set "rel_path=!file_dir:%INPUT_DIR%=!"
    rem 构建输出子目录路径
    set "output_subdir=%OUTPUT_DIR%!rel_path!"
    rem 确保输出子目录存在(mkdir会自动创建多级目录)
    if not exist "!output_subdir!" mkdir "!output_subdir!"
    rem 构建完整的输出文件路径
    set "output_path=!output_subdir!!base_name!_converted.mp4"
    rem -----------------------------------------
    
    rem 显示信息
    echo 正在处理: "%%i"
    echo 输出到: "!output_path!"
    
    rem 执行ffmpeg压缩命令 libx264编码方式,crf控制视频质量,28是质量参数,越小质量越好,但文件越大,
    rem -vf "scale='min(960, iw)':-2" 视频缩放,-2是保持宽高比,min(960, iw)是宽度不超过960,不需要缩放直接删除即可
    rem -c:a aac -b:a 96k 音频编码为aac,比特率96k
    ffmpeg -y -i "%%i" -c:v libx264 -crf 28 -vf "scale='min(960, iw)':-2" -c:a aac -b:a 96k "!output_path!"
    
    if !errorlevel! neq 0 (
        echo 错误: 处理 "%%i" 时出现问题
    ) else (
        echo 成功处理: "%%i"
    )
    echo ----------------------------------------
)

echo 所有文件处理完成!
pause

这段代码可在win环境下使用,另存成bat或cmd文件,修改输入文件夹input和输出文件夹output(路径全英文,路径中不能有空格),然后执行就行,需要用到FFmpeg.exe,如果没有可以下载一个win版的。视频压缩效果可以修改ffmpeg -y -i "%%i" -c:v libx264 -crf 28 -vf "scale='min(960, iw)':-2" -c:a aac -b:a 96k "!output_path!"这句中的相关参数。

windows用的ffmpeg可以从[https://www.gyan.dev/ffmpeg/builds/#release-builds][1]或者[https://github.com/BtbN/FFmpeg-Builds/releases][2]下载。

06月 11

AI文生图

用了好久的ai工具了,一只没有在网站上有什么实际的内容体现。今天让AI根据《登鹳雀楼》的内容,画了几幅画。
2c755066-a087-43ff-a7ce-99c62f9c0e57.jpeg
白日依山尽

5e2dde0f-e5c1-4b73-81a7-ff5401b7237c.jpeg
黄河入海流

c3c5f0d0-8827-4259-a636-42a1ab553c6b.jpeg
欲穷千里目

df6c772b-764b-44ee-a9d0-26439a120eda.jpeg
更上一层楼

整体效果还可以。用的是flux dev模型。

02月 19

easyspider采集内容遇到#shadow-root(open)反爬措施解决办法

使用采集字段的采集内容类型设置:(针对该元素的)JavaScript代码返回值(需以return 开头)

使用javascript脚本内容如下:

return (function() {
    // 假设XPath表达式已经给出承载#shadow-root(open)元素的父节点定位,例如:'//div[@id="TabContent_e19c965497fcdcc686df0ae5a39702c32"]',
    const xpath = '//div[@id="TabContent_e19c965497fcdcc686df0ae5a39702c32"]';//这句需要修改定位内容,其他内容不用修改
    
    // 使用 document.evaluate 方法执行XPath查询
    const result = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
    const shadowHost = result.singleNodeValue;
    
    if (!shadowHost) {
        console.error('未找到匹配的元素');
        return '未找到匹配的元素';
    }
    
    // 检查是否可以直接访问 shadowRoot 属性
    if (shadowHost.shadowRoot) {
        // 如果可以访问,则返回其 innerHTML
        return shadowHost.shadowRoot.innerHTML;
    } else if (typeof shadowHost.getRootNode === 'function') {
        // 使用 getRootNode 方法尝试获取 open 或 closed Shadow Root
        const rootNode = shadowHost.getRootNode();
        if (rootNode instanceof ShadowRoot) {
            // 如果是 ShadowRoot 实例,返回其 innerHTML
            return rootNode.innerHTML;
        }
    }
    
    // 如果无法访问 Shadow DOM,返回错误信息
    console.error('无法访问指定元素的 Shadow DOM');
    return '无法访问指定元素的 Shadow DOM';
})();
02月 13

pbootcms目录权限设置

这两天迁移了2个网站,cms系统是pbootcms。新的服务器使用的是lnmp搭建的环境,默认站点位置在/home/wwwroot/site/
为了确保PbootCMS能够正常运行,需要做几个操作。

  1. 改变站点的所有人。命令使用chown -R www:www /home/wwwroot/site/

这句表示更改文件夹site下所有文件的所有者为www

  1. 更改目录的读取写入权限。有4个目录需要修改权限,data,runtime,static,core/extend/ueditor,config这几个目录,其中:
    data目录存放sqlite数据库文件,如果使用mysql数据库,这个文件夹不存在
    runtime,存放运行文件、访问过程数据
    static,存放图片等上传附件等内容
    UEditor,在线编辑器,可以上传

修改权限命令使用:chmod -R 755 目录名称
修改完成后,网站应该可以正常访问了。

迁移时,记的修改数据库配置文件,把数据库一起迁移。

01月 17

关于浏览器访问ipv6地址的方法

最近在研究给网站增加ipv6地址,但是地址增加了,每次在火狐中输入ipv6的地址,总是会跳转到搜索引擎。总感觉莫名其妙的

研究了好半天,ipv6解析优先已经打开了,但是还是无法访问。终于搜到一个帖子,里边访问ipv6地址使用中括号括起来了,好吧,我又小白(╯︵╰)

使用这个方式,可以正常访问ipv6地址了

类似这样的https://[2409:8c10:c00:140b:3::7e3]如果需要增加端口号,在括号后边增加冒号端口号就可以了https://[2409:8c10:c00:140b:3::7e3]:80