使用 ffmpeg 精确剪切视频

使用 ffmpeg 精确剪切视频

我想使用 ffmpeg 剪切视频以进行机器学习。

我如何确保如果我剪切(例如)1s 的视频@25fps,这将提供正好 25 帧同步的音频和视频?

我看到 ffmpeg 在剪切时寻找关键帧,并选取最近的一个。我遇到了麻烦,因为它生成了负时间戳,并用复制的帧填充了剪切视频的末尾。

我知道元数据不显示真实的 fps 等等。

那么,什么样的管道才能获得与音频流对齐的精确帧数的精确剪切呢?

谢谢

答案1

根据视频的编解码器和容器,这可能需要一些违反直觉的步骤:许多编解码器根本不直接允许随机的输入点和输出点。

  • 首先,您需要剪切视频(暂时忽略音频),最好使用ffmpeg 或另一个实例进行剪切-ss inpoint。事实证明,这是一种以帧精确方式剪切视频流的可靠方法。-pix_fmt yuv420p -an -f yuv4mpegpipe -frames:v 25x264
  • 对于音频,最简单的方法是转换为-c:a pcm_s16le“-f s16le”,然后在文件级别操作结果以包含来自正确偏移量的正确字节数。
  • 最后ffmpeg一步可以压缩音频(如果需要)或将其与视频混合。由于原始 PCM 不包含时间戳,因此不存在异步的可能性。

事实证明,这是一种可靠的方法,可以将来自可疑来源的视频(即来自某些广告商的商业片段)放入严格监管的线性流(即电视频道),而不会引入任何伪影。

相关内容