You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于HTML索引实现多媒体按日期浏览及批量整理需求问询

没问题!针对你的两个需求,我分别给你整理了实用的方案:

方案一:生成本地HTML索引按日期查看所有媒体文件

这个方案用Python脚本自动遍历你的所有文件夹,提取每个媒体文件的拍摄/修改日期,生成一个按日期排序的HTML页面——你不需要手动写任何文件路径,脚本全搞定,而且本地打开就能用,完全不用对外部署。

操作步骤:

  1. 先安装需要的依赖库(打开终端/命令提示符执行):
pip install pillow exifread
  1. 复制下面的脚本,保存为generate_media_index.py:
import os
from datetime import datetime
from PIL import Image
import exifread

# 替换成你的硬盘根文件夹路径
ROOT_FOLDER = "D:/Photos"
# 支持的媒体文件格式,可按需添加
SUPPORTED_FORMATS = ('.jpg', '.jpeg', '.png', '.gif', '.mp4', '.mov', '.avi', '.mkv')

def get_media_date(file_path):
    # 优先获取图片的EXIF拍摄日期
    if file_path.lower().endswith(('.jpg', '.jpeg', '.png')):
        try:
            with open(file_path, 'rb') as f:
                tags = exifread.process_file(f, details=False)
                if 'EXIF DateTimeOriginal' in tags:
                    date_str = str(tags['EXIF DateTimeOriginal'])
                    return datetime.strptime(date_str, '%Y:%m:%d %H:%M:%S')
        except Exception:
            pass
    # 没有EXIF信息时,用文件修改时间代替
    return datetime.fromtimestamp(os.path.getmtime(file_path))

def generate_html(media_files):
    # 按日期倒序排列(最新的在最前面)
    sorted_files = sorted(media_files, key=lambda x: x[1], reverse=True)
    
    html_content = """
    <!DOCTYPE html>
    <html>
    <head>
        <title>媒体文件按日期索引</title>
        <style>
            body { max-width: 1400px; margin: 0 auto; padding: 20px; font-family: Arial, sans-serif; }
            .media-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 15px; }
            .media-item { text-align: center; border-radius: 4px; overflow: hidden; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
            .media-item img, .media-item video { width: 100%; height: 150px; object-fit: cover; }
            .date-label { font-size: 12px; color: #666; padding: 5px 0; }
        </style>
    </head>
    <body>
        <h1>所有媒体文件按日期排序</h1>
        <div class="media-grid">
    """
    
    for file_path, date in sorted_files:
        relative_path = os.path.relpath(file_path, ROOT_FOLDER)
        date_str = date.strftime('%Y-%m-%d %H:%M:%S')
        filename = os.path.basename(file_path)
        
        if file_path.lower().endswith(('.jpg', '.jpeg', '.png', '.gif')):
            html_content += f"""
            <div class="media-item">
                <a href="{relative_path}" target="_blank" title="{filename}">
                    <img src="{relative_path}" alt="{filename}">
                </a>
                <div class="date-label">{date_str}</div>
            </div>
            """
        else:
            # 视频文件直接嵌入预览,点击可打开原文件
            html_content += f"""
            <div class="media-item">
                <a href="{relative_path}" target="_blank" title="{filename}">
                    <video controls poster="" width="100%" height="150px">
                        <source src="{relative_path}" type="video/mp4">
                        你的浏览器不支持视频播放
                    </video>
                </a>
                <div class="date-label">{date_str}</div>
            </div>
            """
    
    html_content += """
        </div>
    </body>
    </html>
    """
    
    # 把HTML文件保存到根文件夹
    index_path = os.path.join(ROOT_FOLDER, "media_index.html")
    with open(index_path, 'w', encoding='utf-8') as f:
        f.write(html_content)
    print(f"索引文件已生成:{index_path}")

def main():
    media_files = []
    # 遍历所有子文件夹,收集媒体文件
    for root, dirs, files in os.walk(ROOT_FOLDER):
        for file in files:
            if file.lower().endswith(SUPPORTED_FORMATS):
                file_path = os.path.join(root, file)
                media_date = get_media_date(file_path)
                media_files.append((file_path, media_date))
    generate_html(media_files)

if __name__ == "__main__":
    main()
  1. 修改脚本里的ROOT_FOLDER为你的硬盘实际路径,运行脚本:
python generate_media_index.py
  1. 打开根文件夹里生成的media_index.html,就能看到按日期排序的所有照片/视频了,点击可直接查看原文件。
方案二:批量迁移嵌套文件夹中的媒体文件到单个文件夹

如果生成HTML索引不符合你的预期,直接把所有文件迁移到单个文件夹也是个简单的办法,我给你准备了不同系统的命令行方法,自动处理重名文件:

Windows(PowerShell):

# 替换为你的源文件夹和目标文件夹路径
$source = "D:\Photos"
$target = "D:\AllMedia"

# 创建目标文件夹(如果不存在)
New-Item -ItemType Directory -Force -Path $target

# 遍历所有媒体文件,复制到目标文件夹,重名文件自动加数字后缀
Get-ChildItem -Path $source -Recurse -File -Include *.jpg,*.jpeg,*.png,*.gif,*.mp4,*.mov,*.avi,*.mkv | ForEach-Object {
    $destPath = Join-Path $target $_.Name
    $counter = 1
    while (Test-Path $destPath) {
        $destPath = Join-Path $target "$($_.BaseName)_$counter$($_.Extension)"
        $counter++
    }
    Copy-Item $_.FullName -Destination $destPath
}

Linux/macOS(终端):

# 替换为你的源文件夹和目标文件夹路径
source="/mnt/Photos"
target="/mnt/AllMedia"

# 创建目标文件夹(如果不存在)
mkdir -p "$target"

# 遍历复制媒体文件,重名文件自动加数字后缀
find "$source" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -o -iname "*.mp4" -o -iname "*.mov" -o -iname "*.avi" -o -iname "*.mkv" \) | while read file; do
    filename=$(basename "$file")
    dest="$target/$filename"
    counter=1
    while [ -f "$dest" ]; do
        dest="$target/$(basename "$file" .${filename##*.})_$counter.${filename##*.}"
        counter=$((counter+1))
    done
    cp "$file" "$dest"
done

注意:迁移前建议先备份重要文件,避免意外情况。

内容的提问来源于stack exchange,提问作者SugarTe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:16:49