V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzfer
V2EX  ›  FFmpeg

ffmpeg 精准切割视频优化相关的问题

  •  
  •   zzfer · 51 天前 · 1727 次点击
    这是一个创建于 51 天前的主题,其中的信息可能已经有所发展或是发生改变。

    要非常精准,且不会出现帧数丢失,是否只能转码切割?执行的命令如下

    ffmpeg -ss -start -accurate_seek -i -videoPath -preset ultrafast -t -3600 -c:v libx264 -c:a aac -strict experimental -resultPath -y
    

    查了好多这种是唯一符合要求的切割方法,但是速度很慢,想问问有没有大佬可以优化的地方

    13 条回复    2021-10-18 10:31:37 +08:00
    flyhaozi
        1
    flyhaozi  
       51 天前
    可以先无损粗切,然后再转码精准切割,应该能省点时间?
    rosu
        2
    rosu  
       51 天前 via iPhone   ❤️ 1
    最精确查找是要逐帧解码的,ss 也应该应用到输出文件(-i 参数值之后)。
    又要快又要准,可以先 ss 在输入前指定位置,再 ss 指定输入后的位置…

    参考官方文档: https://trac.ffmpeg.org/wiki/Seeking
    mxT52CRuqR6o5
        3
    mxT52CRuqR6o5  
       51 天前 via Android
    把丢失的那几帧进行转码切割然后拼起来,有没有可行性?
    ch2
        4
    ch2  
       51 天前
    粗剪就行了吧
    ffmpeg -ss START -to END -i YOUR_FILE_NAME.mp4 -codec copy -avoid_negative_ts 1 OUTPUT.mp4
    msg7086
        5
    msg7086  
       51 天前
    > 是否只能转码切割?

    是的。每个 GOP 是一个整体,没办法直接无损切开。
    wszgrcy
        6
    wszgrcy  
       51 天前
    是的,我记得去年我也问过,参数加前面才能正常切,但是速度降下来了,再后面的是会找最近的关键帧好像是
    AX5N
        7
    AX5N  
       51 天前
    是的,必须转码
    LeeReamond
        8
    LeeReamond  
       51 天前
    @msg7086 这么说的话特定情况下能否实现无损?原编码每个 GOP 独立且恰好切割 GOP 帧数
    msg7086
        9
    msg7086  
       51 天前
    @LeeReamond 如果正好切在 GOP 上的话当然没问题。
    实际上,非精准切割就是切在 GOP 边界上。

    PS: 音频其实也有自己的「 GOP 」,只不过音频的帧比较小,所以切割的时候不会距离太远。
    比如 AAC 在 48khz 下一个帧长 21.3ms ,这 21.3ms 也是没法切开的。
    LeeReamond
        10
    LeeReamond  
       50 天前
    @msg7086 所以按大佬所说 ffmpeg 的处理方式是,如果遇到非封闭 gop 就编码,而后续如果 gop 是完整的话就直接复制?我比较好奇因为我印象中用 ffmpeg 切割视频是没有转码时间的,基本一个复制文件的时间就结束了
    msg7086
        11
    msg7086  
       50 天前   ❤️ 1
    @LeeReamond ffmpeg 切割既可以重编码也可以复制流,看你怎么写参数。
    复制流就只能切 GOP 边界,重编码则是精确切割但是全部重编码。
    如果你 ss to 写在输入前面,然后编码用 copy,就是复制流。
    如果你 ss to 写在输出前面,然后编码用 x264,那就是重编码成 x264 。
    (应该没有记错吧。)

    GOP 是很难去凑参数单独重编码的,除非你知道原始编码器用的参数,然后用一样的参数去重编码不完整的 GOP,否则后续 GOP 可能会因为参数不同而花屏。
    ameccc
        12
    ameccc  
       49 天前
    之前用过的方法是先多提前一点 copy,然后在新的文件里找到第一个关键帧,再剪到第一帧。不过有的时候会留下一些不需要的内容。
    zzfer
        13
    zzfer  
    OP
       49 天前
    @flyhaozi 你是说先无损粗切出来一个视频,然后再完整的将这个视频再执行转码切割吗?


    @mxT52CRuqR6o5 尝试过分段切割再拼接起来,但拼接部分会有一秒左右的卡顿


    @ch2 这个试过,速度确实很快,但切割的开始时间恰好是关键帧还没啥问题,如果不是,开头会出现黑屏或者空白屏
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4016 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 08:54 · PVG 16:54 · LAX 00:54 · JFK 03:54
    ♥ Do have faith in what you're doing.