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

支持第三方验证的大音频文件分块哈希Bash脚本问询

没问题,我来帮你写一个符合需求的Bash脚本,同时拆解清楚每个步骤的逻辑,让你能轻松理解和调整。

解决方案概述

你的核心需求是在创建当日预先生成分块哈希用于后续验证,同时能灵活提供特定片段,这个思路完全可行。我们会用ffmpeg高效分割音频,用SHA-256哈希确保分块完整性,最后生成可公开发布的哈希清单。

完整Bash脚本
#!/bin/bash

# -------------------------- 配置参数 --------------------------
INPUT_FILE="foo.mp3"          # 你的原始音频文件
SEGMENT_DURATION=60           # 每个分块的时长(秒),可按需调整,比如30=30秒
SEGMENT_DIR="foo_segments"    # 存放分块的目录名
HASH_FILE="${INPUT_FILE%.mp3}_hashes.sha256"  # 保存哈希值的文件
# -------------------------------------------------------------

# 检查依赖是否安装
check_dependency() {
    if ! command -v "$1" &> /dev/null; then
        echo "错误: 需要安装 $1 才能运行脚本"
        exit 1
    fi
}

check_dependency ffmpeg
check_dependency sha256sum

# 创建分块目录,避免文件混乱
mkdir -p "$SEGMENT_DIR"

# 用ffmpeg分割音频(无损复制编码,速度极快)
echo "正在分割音频文件 $INPUT_FILE..."
ffmpeg -i "$INPUT_FILE" \
    -f segment \
    -segment_time "$SEGMENT_DURATION" \
    -c copy \
    -reset_timestamps 1 \
    "$SEGMENT_DIR/${INPUT_FILE%.mp3}_%04d.mp3"

if [ $? -ne 0 ]; then
    echo "音频分割失败,请检查ffmpeg命令是否正确"
    exit 1
fi

# 生成分块的哈希清单
echo "正在计算分块哈希值..."
> "$HASH_FILE"  # 清空或创建哈希文件

for segment in "$SEGMENT_DIR"/*.mp3; do
    # 计算SHA-256哈希,只保留哈希值和文件名(去掉路径,方便第三方验证)
    sha256sum "$segment" | awk '{print $1 "  " substr($2, index($2, "/")+1)}' >> "$HASH_FILE"
done

echo "操作完成!"
echo "分块文件存放在: $SEGMENT_DIR"
echo "哈希清单文件: $HASH_FILE"
脚本使用说明
  1. 安装依赖:确保你的系统已经安装了ffmpeg(用于音频分割)和sha256sum(通常属于coreutils包,大多数Linux发行版默认自带)。比如在Ubuntu上可以用sudo apt install ffmpeg coreutils安装。
  2. 调整参数:根据你的需求修改脚本开头的配置参数,比如把分块时长改成30秒,适合更精细的片段提取。
  3. 运行脚本:给脚本添加执行权限(chmod +x split_and_hash.sh),然后运行./split_and_hash.sh即可。
后续验证流程
  1. 发布哈希清单:把生成的foo_hashes.sha256文件发布到公开可访问且能记录发布时间的平台(比如GitHub Gist、IPFS、或者你的个人网站)。这个发布时间就是你后续用来证明原音频创建日期的关键凭证。
  2. 提供特定片段:当需要给第三方P提供某个片段时,找到对应的分块文件(比如foo_0015.mp3对应第15个分块,若分块时长为60秒,就是第15分钟的内容),直接发送给P。
  3. 验证完整性和日期:
    • P可以用sha256sum -c foo_hashes.sha256命令验证收到的分块是否和你发布的哈希值匹配,确认片段未被篡改。
    • 通过哈希清单的发布时间(比如GitHub Gist的提交时间、IPFS的区块时间),可以证明原音频在该时间点已经存在(因为分块是从原音频分割而来,哈希值在创建当日生成并发布)。
注意事项
  • 用-c copy参数分割音频是无损且快速的,但要求原音频的编码格式支持分段(MP3完全支持)。如果遇到分割问题,可以去掉-c copy,让ffmpeg重新编码,但会耗时更长。
  • 分块命名用%04d是为了保证文件名有序(比如0001、0002...),方便后续快速定位特定时间段的片段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:28:13