📜  ffmpeg 忽略时间戳 (1)

📅  最后修改于: 2023-12-03 15:15:03.674000             🧑  作者: Mango

FFmpeg 忽略时间戳 (Ignore Timestamp)


在操作媒体文件时,时间戳 (Timestamp) 是一个很重要的概念,用于标记媒体文件中每一个帧 (Frame) 的时间点。但是有些情况下,我们可能需要忽略时间戳,这可能涉及到以下几种情况:

  • 在媒体文件中改变帧的顺序或者删除帧
  • 合并和分割媒体文件时,时间戳的偏移量可能导致问题
  • 在使用不同硬件或软件进行编码或解码时,可能会出现时间戳的不一致性

在使用 FFmpeg 进行媒体处理时,有时需要忽略时间戳,这里提供几种方法。

方法一:忽略输入时间戳

使用 -fflags +discardcorrupt 选项,可以忽略输入媒体文件的时间戳,代码如下:

ffmpeg -fflags +discardcorrupt -i input.mp4 output.mp4

此命令行将输入 input.mp4 媒体文件,忽略时间戳的损坏,生成 output.mp4 输出文件。

方法二:设置输出时间戳为当前系统时间

使用 -use_wallclock_as_timestamps 选项,可以将输出文件的时间戳设置为当前系统时间,代码如下:

ffmpeg -i input.mp4 -use_wallclock_as_timestamps 1 output.mp4

此命令行将输入 input.mp4 媒体文件,并将输出文件的时间戳设置为当前系统时间,生成 output.mp4 输出文件。

方法三:使用 setpts 滤镜

使用 setpts 滤镜可以手动设置帧的时间戳,让它们按照一定的时间间隔来进行排序。在以下命令中,AVTB 表示每个帧之间的间隔时间,AVTB 值越小,帧之间的间隔时间越短,代码如下:

ffmpeg -i input.mp4 -vf setpts='N/(25*TB)' output.mp4

此命令行将输入 input.mp4 媒体文件,并使用 setpts 滤镜对每个帧进行重新排序,生成 output.mp4 输出文件。

方法四:使用 asyncts 滤镜

使用 asyncts 滤镜可以根据音频数据调整视频数据的时间戳,代码如下:

ffmpeg -i input.mp4 -vf-asyncts=compensate video_output.mp4

此命令行将输入 input.mp4 媒体文件,并使用 asyncts 滤镜对音视频数据进行时间戳调整,生成 video_output.mp4 输出文件。

总结:以上几种方法可以忽略输入的时间戳,或者手动修改帧的时间戳,重新排序媒体文件,解决媒体文件时间戳问题。