提示
本案例仅涉及
ProRes
编码的视频素材,以及 ZOOM 录音机录制的WAV
格式声音素材
近期,偶然被一位朋友求助,因为某种原因,他需要提供部分原始声音素材和画面素材给某机构证明是在某特定时间拍摄的,本文姑且称其王同学。
经了解,这位王同学有 DJI
和 ARRI
拍摄的 ProRes
编码格式的素材,以及 ZOOM F6
录制的声音文件,都需要提交。
困难点:修改留痕
用常规方法,这些素材的元数据是很难更改的。
比如,无论是使用 Premiere Pro
、DaVinci Resolve
、Assimilate
都很难直接更改原始素材文件中记录的实际拍摄日期。
这些软件设计之初,就不是为了篡改原始文件的,而是尽可能保留原始的元数据。他们只会将更改以 Sidecar 形式附加到实际的项目中。
如果试图通过更改后的项目,二次渲染,则会留下非常明细的痕迹。元数据中,会带有带有很明显的软件标识。
如下 DaVinci Resolve
渲染导出的片段:
而查看 ARRI RAW 则不会有渲染器信息,而是摄影机相关元数据:
在本次案例中,王同学发送的素材文件中,有着非常详细的元数据信息,但是由于拍摄时没有正确设置摄影机的机内时间,所以该素材的时间明显是不正确的:
解决方案
为了毫无痕修改地元数据中的日期信息,我们就需要直接编辑原始文件。我使用了 HXD 软件,将文件打开为16进制数据形式进行编辑。
音频
WAV音频是最容易进行更改的,用 HXD 打开后,可以看到其元数据存储在文件头部,大部分都可以直接解码成易读的字符,分为 RIFF 和 XML 两部分:
可以看到,在很多地方都存在有日期信息或与日期相关联的信息,并且还同时在RIFF
部分和XML
部分有存储:
- FILE_UID
- FAMILY_UID
- ORIGINAL_FILENAME
- UBITS
- SCENE
- TAPE
- PROJECT
- …
这其中,部分元数据,如 PROJECT 、TAPE 、 SCENE 是可以后期修改的。比如,可以用 Sound Device Wave Agent 进行编辑。但是 ORIGINAL_FILENAME、FAMILY_UID、FILE_UID 软件不支持修改,那么就只能通过16进制编辑器修改文件数据。
需要注意的是,在并没有真正了解WAV文件编码标准的情况下,不要随意增减文件长度,否则会造成文件无法正常打开的情况。
如下所示,我对日期信息直接覆盖编辑后,保存即可。
然后使用 Sound Device Wave Agent 可以查看修改的前后对比。
当然,最后不要忘了更改文件名中的日期信息。
视频
对于 ProRes
编码的视频来说,比音频复杂得多。其关键难点在于:
视频素材中的记录的日期信息,并不能被 HXD 编辑器直接解码成易读文本供我们可视化编辑。
并且,由于容器中不仅封装了视频流,也封装了音频流,所以日期信息同样不仅仅在一个地方存在。
如下图所示,能够发现部分被解码的元数据文本,处在接近文件尾的位置。但是,并不能在其中找到日期信息,所以我们需要一些小技巧,来找到记录日期的16进制数据。
首先,我使用 ffmpeg
复制了两个新的素材,第一个保持素材原本的元数据日期,第二个改为希望修改的元数据日期:
ffmpeg -i "C:\Users\admin\Downloads\A001C003_130101_R420_trial.mov" -metadata creation_time="2013-01-01T00:28:11.000000Z" -codec copy test1.mov
ffmpeg -i "C:\Users\admin\Downloads\A001C003_130101_R420_trial.mov" -metadata creation_time="2024-04-04T00:28:11.000000Z" -codec copy test2.mov
为什么不直接用这种方法更改日期呢?
使用
ffmpeg -i test1.mov
输出更改后的视频日期,会发现原始素材中所有com.arri.camera
的元数据都已经丢失了,ffmpeg
并不支持这些摄影机厂家自己设定的元数据标签。并且,还留下了FFMPEG
修改的痕迹:
因为使用同一个源素材,同一个转码工具,仅仅更改了时间,并且保持了原始的编码格式不变,所以,现在我们可以通过对比 test1.mov
和 test2.mov
的十六进制数据,用敏锐的眼神找不同,两个文件的不同之处,就是文件的变动部分,即日期信息:
如下图所示,CD07DE1BCD07DE1B
被改为了 E233A49BE233A49B
。
- test1.mov
- test2.mov
然后,通过搜索功能,搜索原始素材文件中,符合特征的相似字节数据 CD07DE1B
,发现共有四处。
我们将其字节数据更改为 test2.mov
的 E233A49BE233A49B
即可。同样,需要注意不能更改长度,只能覆盖更新。
更改后:
再次使用 ffmpeg
查看元数据并使用 vlc
尝试播放:
可以发现,时间已经被更改了,同时素材也能正常播放,使用同样的方法对 DJI 素材进行更新,即可收工。