阿水的世界。
最近工作上有需求,需要批量将视频文件进行压缩,且保证视频的质量不能太糊。因此,我写了个使用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]下载。
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';
})(); 这两天迁移了2个网站,cms系统是pbootcms。新的服务器使用的是lnmp搭建的环境,默认站点位置在/home/wwwroot/site/。
为了确保PbootCMS能够正常运行,需要做几个操作。
- 改变站点的所有人。命令使用
chown -R www:www /home/wwwroot/site/
这句表示更改文件夹site下所有文件的所有者为www
- 更改目录的读取写入权限。有4个目录需要修改权限,
data,runtime,static,core/extend/ueditor,config这几个目录,其中:
data目录存放sqlite数据库文件,如果使用mysql数据库,这个文件夹不存在
runtime,存放运行文件、访问过程数据
static,存放图片等上传附件等内容
UEditor,在线编辑器,可以上传
修改权限命令使用:chmod -R 755 目录名称
修改完成后,网站应该可以正常访问了。
迁移时,记的修改数据库配置文件,把数据库一起迁移。



