怎么查视频拍摄地点:从原始文件到核实的七个步骤
· 阅读约 2 分钟
简要回答
怎么查视频拍摄地点,先看原始文件:手机拍摄的视频通常保存着 GPS 坐标,ExifTool 能读出来。TikTok、YouTube 或 Instagram 的副本已经没有这些信息,因此要用 FFmpeg 截取清晰的画面,以图搜图,读取标识、道路和音频中的线索,并用地图影像逐一核实候选地点。
一段十秒、每秒三十帧的手机视频,相当于同一地点的 300 张照片,外加一条音轨。视频因此比任何单张照片都更有价值,不过前提是,你眼前的副本通常并不是原始文件。
本文的方法从文件向外推进:如果你有原始文件,先看元数据;然后看平台展示的内容;再是画面、搜索、线索,最后是核实。每一步都比下一步成本更低,而且任何一步都可能结束这次搜索。
- 检查原始文件中的 GPS 标签,前提是你手上有它。
- 查看平台显示的内容:位置标签、说明文字、评论。
- 截取清晰的画面,使用 FFmpeg 或者暂停后截图。
- 对最好的画面进行以图搜图,查找更早的上传版本。
- 跨画面读取线索,并听一听音频。
- 把最清晰的画面交给 AI 地理定位,得到一个可能的城市。
- 与地图影像核对,然后再下结论。
第 1 步:原始文件有没有保存位置?
通常有,前提是它直接来自一部开启了相机定位权限的手机。iPhone 会把位置写入 QuickTime 的位置标签,安卓手机则写入文件的 user-data 框,ExifTool 两者都能读取。这是整段视频的一个定位点,而不是一条轨迹。
相机需要先获得权限。在 iPhone 上,路径是“设置 → 隐私与安全性 → 定位服务 → 相机”;安卓相机应用则有各自的定位或地理标记开关。苹果的标签保存的是 ISO 6709 坐标字符串,而安卓的开发者文档称,其录制器会以同样的 ISO 6709 格式把地理数据存入 udta 框。
用 ExifTool 读取它
ExifTool 可在 Windows、macOS 和 Linux 上免费使用。以下三条命令已在 13.59 版上测试通过:
exiftool -G1 -s "-*gps*" "-*location*" clip.mov会列出每一个位置标签,不论手机使用的是哪个数据框。输出中的[Keys]表示 iPhone 风格的标签,[UserData]表示安卓风格的标签。iPhone 还会保存LocationAccuracyHorizontal,即手机自己估计的水平误差(米)。exiftool -n -GPSPosition clip.mov会打印纯十进制坐标,例如48.8584 2.2945,可以直接粘贴到地图中。exiftool -CreationDate clip.mov会显示 iPhone 的拍摄时间,以及其时钟的 UTC 偏移量,例如+02:00。
即使没有 GPS,这个 UTC 偏移量也值得看一眼。它表示的是时区而不是地点;一部一直使用本国时区的手机会误导你,但它能在几秒钟内排除世界上的大部分地区。
步骤 3 中已经装好了 FFmpeg?它的配套工具 ffprobe 可以显示原始值:ffprobe -v error -show_entries format_tags clip.mov。留意类似 +48.8584+002.2945+035.000/ 这样的字符串:依次是纬度、经度,然后是以米为单位的海拔,其中加号分别表示北纬和东经。
行车记录仪、无人机和运动相机
这些设备通常记录的是一条轨迹,即每秒或更频繁地记录一个新位置,而不是单个点。ExifTool 目前能读取 124 种此类定时 GPS 数据,但只有在被要求时才会读取。如果它提示 ExtractEmbedded 选项可能找到更多标签,就运行 exiftool -p gpx.fmt -ee3 clip.mp4 > track.gpx,把路线保存为大多数地图工具都能打开的 GPX 文件。gpx.fmt 文件位于完整 ExifTool 下载包的 fmt_files 文件夹中,并且必须放在你运行该命令的文件夹里。
为什么 TikTok、YouTube 和 Instagram 的副本没有位置信息?
因为它们不是上传的原始文件。平台会把每个上传内容重新编码为自己的流媒体版本,这些新文件在写入时没有保留原始文件的元数据,包括 GPS。保存或下载帖子得到的,是其中一个副本;而屏幕录制则是副本的副本。
YouTube 的帮助页面描述了这一过程:新上传的视频会先以低画质处理,之后才提供更高的分辨率。观众看到的是新生成的编码,创作者原始文件中的位置标签根本不属于其中。TikTok 和 Instagram 也会对上传内容重新编码,这也是照片分享后为什么会丢失位置的原因。
所以,“视频位置检查器”无法从你看到的副本中恢复 GPS,它最多只能重复平台公开的关于某个帖子的信息。如果你要核实别人发给你的片段,请要求提供原始文件,以文档或云盘链接的形式发送,而不是作为普通的视频消息。发布与传输的规则决定了元数据能否保留,对视频和照片都一样。
第 2 步:平台本身显示了什么?
只有发帖人选择添加的内容,以及观众所说的话。TikTok 和 Instagram 可以显示标注的地点,YouTube 可以在观看页面上显示视频地点,而说明文字、评论和口述内容常常直接写明地名。标签是一种主张,而不是测量结果。
- 位置标签。 TikTok 和 Instagram 允许发帖人在发布时添加地点,点按它会列出在同一地点标注的其他公开帖子。在 YouTube 上,创作者可以在 YouTube Studio 中设置视频地点;它会显示在观看页面上,点按它会搜索同一地点的公开视频。
- 说明文字、描述和话题标签。 旅行和街头视频通常由拍摄者自行标注。
- 评论。 观众很快就会说“那是车站旁边的拐角”,有时说得不对,但它给了你一个可以验证的假设。
- 口述内容。 在 YouTube 上,展开描述并选择“显示文字记录”,然后在其中搜索那些没有写进说明文字的地名。
- 水印。 转发的版本通常带有原上传者的水印或账号名,而第一次上传的版本可能还保留着被转发版本丢掉的说明文字和标签。
把这些都当作证词来看待。人们会标注最近的地标、城市而非街道,或是他们从未去过的地方。Instagram 指南解释了一个标签值得信任到什么程度。
第 3 步:怎样从视频中截取清晰的画面?
先获取一个文件:原始文件、平台自带的保存功能,或以最高画质进行的屏幕录制。然后用 FFmpeg 每秒采样一帧,挑出关键帧或镜头切换处,并把最清晰的时刻导出为 PNG。全屏暂停后的截图也可以。
屏幕录制也没问题:此后的每种方法读取的都是像素,而不是元数据。先把播放设为最高画质,并尽量隐藏字幕和控件,它们会盖在你想读取的像素上。
FFmpeg 是免费的,其余工作都靠它完成。以下每条命令都已在 FFmpeg 8.0.1 上用真实的街景视频测试过:
- Step 1每秒采样一帧
ffmpeg -i clip.mp4 -vf fps=1 frame_%03d.png会写出 frame_001.png、frame_002.png 等文件。对于较长的视频,fps=1/5每五秒取一帧。 - Step 2抓取关键帧
ffmpeg -i clip.mp4 -vf "select='eq(pict_type,I)'" -fps_mode vfr key_%03d.png只保留以完整图片形式存储的帧。它在 H.264 和 VP9 文件上都能工作,而常被引用的-skip_frame nokey捷径,却会悄悄导出 60 fps VP9 视频的每一帧:30 秒的视频导出了 1800 张图片。 - Step 3截取编辑视频中的切换点
ffmpeg -i clip.mp4 -vf "select='gt(scene,0.3)',showinfo" -fps_mode vfr cut_%03d.png会保存每次切换后的第一帧,并把它的时间以pts_time的形式打印出来。FFmpeg 文档认为 0.3 到 0.5 之间的阈值比较合理。在一段连续的 65 秒步行镜头中,它什么也没找到,所以这个方法适用于蒙太奇式的剪辑。 - Step 4导出最佳时刻
ffmpeg -ss 00:00:12.4 -i clip.mp4 -frames:v 1 best.png会保存第 12.4 秒的那一帧。把时间前后微调零点几秒,可以避开运动模糊。 - Step 5制作联系表
ffmpeg -i clip.mp4 -vf "fps=1/3,scale=480:-1,tile=5x4" -frames:v 1 sheet.png会把第一分钟内每三秒一帧的画面,拼成一张图片,这是找出值得仔细查看的时刻最快的办法。
PNG 不会再经过一次压缩。在我们对下载的街景视频的测试中,PNG 帧在 1080p 下为 1.5 至 2.6 MB,在 4K 下为 3.9 至 5.1 MB;而用 -q:v 2 保存为 .jpg 的同一帧则保持在 1 MB 以下。如果相机原始文件生成的 PNG 超过分析器 10 MB 的上限,这就是备用方案。
没有命令行?在 YouTube 上,暂停后按句号键或逗号键即可前进或后退一帧,然后在全屏状态下截图。免费的 InVID-WeVerify 插件适用于 Chrome 和 Firefox,它可以把链接或上传的视频拆分为关键帧,并把其中任何一帧发送去做以图搜图。
第 4 步:应该对哪些画面进行以图搜图?
包含单一醒目主体的画面:地标、店面、招牌或天际线。把它裁剪出来,至少在两个搜索引擎上搜索,并在 TinEye 中按最早排序,以找到同一素材更早的上传版本,它们往往带有原始的说明文字和地点。
以图搜图匹配的是图像,而不是地点,所以它回答的是一个更窄的问题:这个场景,或者这段确切的素材,以前是否发布过?对于病毒式传播的片段,答案往往是肯定的,而更早的、带有不同说明文字的上传版本,既是一条地点线索,也是一个警示:当前的说明文字可能是错的。
视频给你的尝试机会比照片多。比如搜索三到四个不同的时刻:宽镜头的开场、最清晰的标识、最奇怪的建筑,因为每一个都是一次单独的匹配机会。YouTube 的缩略图也值得搜索一下,不过自定义的缩略图未必是视频中的一帧。
哪种搜索引擎适合哪种主题很重要,而 Google Lens 和 Yandex 在不同场景下往往会失败。在手机上,手机端的方法不需要安装任何应用。
第 5 步:视频能提供哪些照片无法提供的线索?
动态、多个角度和声音。行驶中的双向车流能确定人们靠哪一侧行驶,镜头横摇能显示某一帧会裁掉的天际线,一帧中模糊的招牌在下一帧中可能清晰,而音轨里则可能出现某种语言或地名。
像读照片一样读取每一帧:文字和招牌、道路标线、车牌、建筑、植被,然后是光线。国家线索指南解释了为什么道路标线这类受规范约束的东西,比景观更有价值。视频额外提供的是运动和重复:
- 行驶方向。 在静态照片中,停着的车可能朝任一方向。在视频中,行驶中的双向车流即使画面模糊,也能毫无疑问地显示驾驶的一侧,只是要避开单行道。
- 同一块招牌,多次出现。 眩光、模糊或经过的公交车可能在一帧中遮住文字,而在下一帧中露出。在放弃之前,逐帧查看。
- 横摇和转向。 一台四处扫视的相机,会展示单一画面遗漏的山丘、海岸线或天际线。
- 整段视频中的太阳。 随着镜头转动,你可以看到阴影沿街道落在哪个方向。当植被无法提供线索时,阴影能给出半球和大致的时间。
听一听音轨
首先要确认音频确实来自拍摄场景。在 TikTok 和 Instagram 上,音频标签应当显示“原声”或“原创音频”,并附上发帖人自己的名字;如果显示的是歌曲名或别人的账号名,就说明声音是借来的。即使是原声,也可能在上传前被配音,因此对音乐和旁白都应保持怀疑。
- 语言和口音。 一种语言会同时缩小可能国家的范围,而一种方言甚至能缩小到某个地区。
- 广播。 车站、站台和机场的广播会有意提及地名。把停靠站转写下来,然后搜索它。
- 特征性声音。 紧急警报声因国家而异,宣礼声、有轨电车的铃声或教堂钟声,也各自能缩小地区范围。
- 电力嗡鸣声。 全球大部分地区的交流电频率为 50 Hz,北美以及巴西、韩国等少数国家则为 60 Hz。频谱图中稳定的这两种频率之一,能把候选地区一分为二,但前提是它没有被手机的降噪功能滤掉,而手机降噪往往会把它去掉。
第 6 步:AI 地理定位能定位视频吗?
不能定位视频文件,但可以定位它的画面。GeoSpy 分析的是静态图片,所以请把最清晰的一帧以 JPG 或 PNG 格式上传,大小不超过 10 MB。它返回的是可能的城市和国家,而不是地址;由于 FFmpeg 截出的画面不含 GPS,估计只能依据画面中可见的内容。
选择包含最多证据类型的画面:道路、建筑、招牌和植被同时出现,胜过只有某一项的特写。先把字幕、副标题和平台按钮裁掉,它们遮住了证据,却不提供任何证据。
然后再对来自不同时刻的第二帧和第三帧进行分析。如果它们指向同一座城市,可信度就会提高;如果结果分散,说明场景含糊不清,诚实的结论是一个地区。模型如何读取场景解释了为什么有些画面有效而有些无效。
第 7 步:在下结论之前,如何核实位置?
在街景或卫星影像中找到候选地点,并检查你在寻找它时没有用到的细节,比如路缘、排水管或屋顶线。然后核对时间:季节、光线和最早的上传版本,都应当与附在视频上的说法相吻合。
与你用来找到某地的线索相吻合,并不能证明什么,因为你本来就已经知道它们是一致的。检验的标准是那些未被使用的细节是否也能对上。视频在这方面比照片更容易:取十秒之后的一帧,检查下一栋建筑是不是正确的那一栋。
时间是另一半。来自旧事件的素材被重复使用的情况很常见,所以第 4 步中最早的副本、树木的状态和光线的方向,都应当与所声称的内容相符。OSINT 工作流程阐述了完整的原则,包括需要记录什么;而核实指南则介绍了可以逐帧使用的检查方法。
在影像稀少的地方,街景的覆盖范围并不均匀,此时正确的结论是一个带有明确可信度的地区,而不是某一条街道。
怎么查视频拍摄地点,每种证据能告诉你什么?
只有原始文件中的 GPS 能单独给出坐标。其他一切都只能缩小搜索范围:标签和说明文字是主张,以图搜图能找到更早的副本,视觉和音频线索给出国家或地区,而 AI 地理定位给出一个可能的城市。
| 证据 | 能说明什么 | 不能说明什么 |
|---|---|---|
| 原始文件中的 GPS 标签 | 录制发生的位置,通常精确到几米 | 它是否被编辑过;关于平台副本的任何情况 |
| 带时间的 GPS 轨迹(行车记录仪、无人机) | 完整的路线,逐点记录 | 文件一旦被重新编码,任何信息 |
| 平台位置标签 | 发帖人选择命名的地点 | 相机实际所在的位置 |
| 说明文字、评论、转录文本 | 人们输入或说出的地名 | 它们是否正确 |
| 对画面进行以图搜图 | 更早的上传版本和命名该场景的网页 | 关于未公开场景的任何信息 |
| 跨画面的视觉线索 | 国家、地区,有时是街道 | 单独的一个地址 |
| 音频 | 语言、地区,有时是具名的站点 | 任何信息,如果声音是后来添加的 |
| 对画面的 AI 地理定位 | 可能的城市和国家 | 一个地址,或证明 |
| 太阳与阴影 | 半球和大致的时间 | 单靠它无法确定国家 |
两个相互独立的来源彼此吻合,比如一个标签和一次街景匹配,才构成一项发现;只有一个来源则只是线索。对于静态图片,主要照片指南并排比较了同样的方法。
常见问题
- 能看出一段 TikTok 视频是在哪里拍的吗?
- 只有当发帖人标注了地点,或在说明文字中提到地名时才可以。TikTok 会重新编码上传的内容,所以保存的副本不含手机的 GPS。除此之外,你只剩下画面和声音,而上面的方法正是从这些入手的。
- YouTube 视频带有位置信息吗?
- 在你能观看或保存的版本中没有。YouTube 提供的是经过处理的副本,不含原始文件的元数据。创作者可以在 YouTube Studio 中添加视频地点,它会显示在观看页面上,但那是创作者的说法,而不是 GPS 读数。
- GeoSpy 能分析视频文件吗?
- 不能。它只分析静态图片,即大小不超过 10 MB 的 JPG 或 PNG,所以请先截取一帧再上传。它返回的是城市级别的估计,而不是地址;上传的照片也不会被保存。
- 屏幕录制会保留原始视频的位置吗?
- 不会。屏幕录制是你自己的设备生成的新文件,不带有原始视频的任何元数据。但它对所有视觉方法依然有效,因为这些方法读取的是像素。
- 找出视频的拍摄地点合法吗?
- 分析已公开发布的影像来确定其拍摄地点,通常是合法的。但利用这一结果去找到、跟踪或联系某个人,无论位置是如何得到的,都可能构成跟踪或骚扰。法律指南说明了界线在哪里。
参考资料
- QuickTime Tags — ExifTool (Phil Harvey)iPhone(Keys location.ISO6709)和安卓(UserData ©xyz)视频的 GPSCoordinates,以及使用 ExtractEmbedded 读取的 124 种定时 GPS 类型。
- Geotagging with ExifTool — ExifTool (Phil Harvey)用于从视频中提取完整轨迹的 gpx.fmt 轨迹日志命令,以及所需的 -ee3 选项。
- MediaRecorder.setLocation() — Android Developers安卓将视频地理数据按 ISO 6709 标准存入 udta 框。
- FFmpeg Filters Documentation: select, aselect — FFmpegI 帧和场景切换表达式,以及 0.3 至 0.5 的场景阈值范围。
- Tag your location on videos and live streams — YouTube Help创作者设置的视频地点在观众端的显示位置。
- Low video quality after upload — YouTube Help上传内容会被处理为新版本,并从低画质开始。
- Mains electricity by country — Wikipedia全球大部分地区为 50 Hz;北美是最大的 60 Hz 例外地区。
继续阅读
没有EXIF怎么定位照片:三种不依赖元数据的方法
没有EXIF怎么定位照片?元数据已经被删除,还剩下什么?介绍三种对剥离后的照片依然有效的方法、各自的实际效果,以及它们的局限。
· 阅读约 1 分钟
osint图片定位方法:先查元数据,再做验证
osint图片定位方法:一套可重复的步骤顺序、保持结论可靠的纪律,以及从研究滑向监控的那个停止点,本文都会说明。
· 阅读约 1 分钟
从照片线索判断国家:先看法规规定的事物
从照片线索判断国家:受法规约束的事物胜过自然事物。这些线索会在国界处突然改变,按缩小范围的程度和识别速度排序。
· 阅读约 1 分钟
以图搜图网站推荐:主流搜索引擎横向对比
Google Lens、Yandex、Bing 和 TinEye 各有所长。这份以图搜图网站推荐对比了每个引擎擅长什么,以及何时该改用 AI 地理定位。
· 阅读约 1 分钟