ffmpeg 以高精度获取最后 x 秒

标签 ffmpeg

我想批量处理 mp4 视频,获取每个视频的最后 x 秒并将它们保存到单个文件中。
我需要以非常高的精度执行此操作,最好达到 0.001 秒或更好。
找到了一个相关的问题 (FFMPEG: get last 10 seconds),建议使用 -sseof,效果很好,但正如答案所说,它对于流复制并不完全准确。

我正在尝试将视频长度与引用视频的长度相匹配。

我需要重新编码吗?如果我将持续时间指定为 00:00:00.000000(我从引用视频 ffprobe 中获得),sseof 是否可以足够准确地处理这个问题?

请参阅下面的相关 ffprobe -i,所有要处理的视频都具有相同的编码。

   Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:00:58.67, start: 0.000000, bitrate: 639 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360, 499 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 131 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
duration=58.673000

有没有更好的方法来实现帧级精度?作为最终目标,我需要以 25fps 的“帧级精度”覆盖这些视频。

非常感谢!

最佳答案

切割结果仅受 ss/sseof 精度的影响,前提是额外的精度使您位于关键帧的另一侧,即如果 KF 为 10.822 并且您提供 -ss 10.82 -i ..然后 ffmpeg 从较早的关键帧中选择帧,但如果它是 -ss 10.823然后 10.822 成为入点。

您必须重新编码才能进行可靠的切割。

关于ffmpeg 以高精度获取最后 x 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49234157/

相关文章:

android - 上传 .aab 文件后,它没有显示基于移动架构的应用程序大小

ffmpeg - 从网络摄像头编码未压缩的 avi

ffmpeg:多个filter_complex的链,重用中间输出流

ffmpeg - 用圆角覆盖视频

FFmpeg 缩放和 concat 与动态高度

javascript - 从浏览器录制视频并流式传输到 Youtube/Twitch 时,如何使用 ffmpeg 添加音频?

python - 是否可以使用 FFmpeg 从视频文件夹中剪切 "random"部分并将它们连接成 1 个视频?

video - FFmpeg:将任何视频转换为边栏模糊的方形 1:1 视频

C# 从视频文件的一部分中提取帧

bash - 如何制作固定时长的视频