Google Takeout视频元数据与导出文件名匹配技术问询
解决方案:YouTube Takeout视频文件与元数据CSV匹配(无需API/Python)
针对你提到的700+个Takeout导出视频(截断文件名+序号)与videos.csv元数据匹配的问题,以下是几个无需依赖YouTube API或Python的实用方案:
方案1:利用原始Takeout文件夹的video_id.txt(最准确)
如果还保留着Takeout导出的原始文件夹结构(每个视频单独存放在子文件夹中,内含video_id.txt和对应的mp4文件),可以通过命令行批量提取文件名与Video ID的对应关系:
macOS/Linux(Bash)
find /path/to/takeout/videos -type f -name "video_id.txt" | while read -r vid_file; do video_dir=$(dirname "$vid_file") video_id=$(cat "$vid_file") mp4_file=$(find "$video_dir" -maxdepth 1 -type f -name "*.mp4" | head -n 1) if [ -n "$mp4_file" ]; then mp4_name=$(basename "$mp4_file") echo "$mp4_name,$video_id" fi done > video_id_map.csv
Windows(PowerShell)
Get-ChildItem -Path "C:\path\to\takeout\videos" -Recurse -Directory | ForEach-Object { $vidFile = Join-Path $_.FullName "video_id.txt" if (Test-Path $vidFile) { $videoID = Get-Content $vidFile -Raw | Trim $mp4File = Get-ChildItem $_.FullName -Filter "*.mp4" | Select-Object -First 1 if ($mp4File) { "$($mp4File.Name),$videoID" } } } | Out-File "video_id_map.csv" -Encoding UTF8
生成的video_id_map.csv会包含截断后的mp4文件名与对应Video ID,直接与原videos.csv通过Video ID字段做关联即可。
方案2:通过文件修改时间匹配
Takeout导出的视频文件修改时间会与YouTube视频的发布/更新时间对应,而videos.csv中包含Published At或Updated At字段(UTC时区):
- 用命令行提取所有mp4文件的修改时间:
- Bash:
stat -c "%Y,%n" /path/to/videos/*.mp4 > file_times.csv(%Y输出UTC时间戳,方便匹配) - PowerShell:
Get-ChildItem "C:\path\to\videos\*.mp4" | Select-Object Name, @{Name='UnixTime';Expression={[int](Get-Date $_.LastWriteTimeUtc -UFormat %s)}} | Export-Csv -Path file_times.csv -NoTypeInformation
- Bash:
- 在
videos.csv中把Published At字段转成UTC时间戳(用Excel/LibreOffice的UNIX()函数或自定义公式) - 通过时间戳字段在表格工具中做匹配,注意允许±30秒的误差(导出过程可能有微小时间偏移)
方案3:通过视频时长匹配
如果时间匹配有误差,可利用视频时长做匹配:
- 安装
ffmpeg(跨平台免费工具),用命令行提取所有mp4的时长:- Bash:
for mp4 in /path/to/videos/*.mp4; do duration=$(ffmpeg -i "$mp4" 2>&1 | grep -oP 'Duration: \K[^,]+' | sed 's/\..*//') echo "$(basename "$mp4"),$duration" done > video_durations.csv - PowerShell:
Get-ChildItem "C:\path\to\videos\*.mp4" | ForEach-Object { $duration = ffmpeg -i $_.FullName 2>&1 | Select-String 'Duration:' | ForEach-Object { $_.Line -replace '.*Duration: (\d+:\d+:\d+).*', '$1' } "$($_.Name),$duration" } | Out-File "video_durations.csv" -Encoding UTF8
- Bash:
- 将
videos.csv中的Duration字段(如PT15M30S)转成HH:MM:SS格式,再与video_durations.csv做匹配。对于时长重复的视频,结合修改时间进一步区分。
方案4:通过文件哈希值匹配
如果videos.csv中包含文件哈希字段(如MD5),可直接计算mp4文件的哈希值做匹配:
- Bash(MD5):
md5sum /path/to/videos/*.mp4 > video_hashes.csv - PowerShell(MD5):
Get-ChildItem "C:\path\to\videos\*.mp4" | Get-FileHash -Algorithm MD5 | Select-Object @{Name='FileName';Expression={$_.Path | Split-Path -Leaf}}, Hash | Export-Csv -Path video_hashes.csv -NoTypeInformation
然后在表格工具中通过哈希字段关联即可。
注意事项
- 处理重复截断文件名(带(1)(2)后缀)时,优先用时长+修改时间的组合匹配,确保准确性
- 所有操作建议先在小批量视频上测试,再推广到全部700+个文件
内容的提问来源于stack exchange,提问作者Jackie Meese
相关产品推荐
相关产品推荐

