我想使用 ffmpeg 剪切视频以进行机器学习。
我如何确保如果我剪切(例如)1s 的视频@25fps,这将提供正好 25 帧同步的音频和视频?
我看到 ffmpeg 在剪切时寻找关键帧,并选取最近的一个。我遇到了麻烦,因为它生成了负时间戳,并用复制的帧填充了剪切视频的末尾。
我知道元数据不显示真实的 fps 等等。
那么,什么样的管道才能获得与音频流对齐的精确帧数的精确剪切呢?
谢谢
答案1
根据视频的编解码器和容器,这可能需要一些违反直觉的步骤:许多编解码器根本不直接允许随机的输入点和输出点。
- 首先,您需要剪切视频(暂时忽略音频),最好使用ffmpeg 或另一个实例进行剪切
-ss inpoint
。事实证明,这是一种以帧精确方式剪切视频流的可靠方法。-pix_fmt yuv420p -an -f yuv4mpegpipe -frames:v 25
x264
- 对于音频,最简单的方法是转换为
-c:a pcm_s16le
“-f s16le”,然后在文件级别操作结果以包含来自正确偏移量的正确字节数。 - 最后
ffmpeg
一步可以压缩音频(如果需要)或将其与视频混合。由于原始 PCM 不包含时间戳,因此不存在异步的可能性。
事实证明,这是一种可靠的方法,可以将来自可疑来源的视频(即来自某些广告商的商业片段)放入严格监管的线性流(即电视频道),而不会引入任何伪影。