时间码通常以特定于文件格式的格式出现,因此不能指望 ffmpeg 在没有明确说明的情况下直接“复制”它。
有时它被添加为文件的全局元数据,有时它专门添加到视频流中,有时它可能作为元数据添加到一个单独的“数据”流中。
您需要找到原始时间码所在的流。
您可以通过运行来确定这一点
ffmpeg -i INPUT
示例输出(摘录):
ffmpeg version...
...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'inputfile.mp4':
Metadata:
...
Stream #0:0(und): Video: h264...
...
Stream #0:2(und): Data: none (rtmd / 0x646D7472), 2252 kb/s (default)
Metadata:
creation_time : 2021-06-19T16:39:17.000000Z
handler_name : Timed Metadata Media Handler
timecode : 07:15:07:17
这将显示有关所有输入流的信息,包括元数据。然后记下包含时间码的流编号,在此示例中为输入 0 的流 2,并使用 -map_metadata 将其映射到全局元数据。
例如,这会将索引为 2 (s:2) 的流的元数据从第一个输入 (0:) 映射到文件的全局(默认)元数据,并将音频-视频流复制到输出:
ffmpeg -i INPUT -map_metadata 0:s:2 -c copy OUTPUT
请注意,“s”的编号和含义与其他更常见的选项不同。在ffmpeg documentation 中查看更多信息。
ffmpeg 然后从该流中读取它所理解的任何内容(主要包括时间码),将其转换为目标文件格式的指定元数据格式,并将其包含在输出中。
生成的文件将具有可在 DaVinci Resolve 或 Premiere Pro 等编辑软件中识别的时间码。