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

使用 ffmpeg 剪切视频得到的视频总时长没有改变

  •  
  •   Shingekinoshinji · 2021-02-02 23:30:23 +08:00 · 2443 次点击
    这是一个创建于 1424 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我使用如下命令剪切一个视频:

    ffmpeg -ss 00:03:40 -to 00:09:39 -accurate_seek -i A.mp4  B.mp4
    

    得到的视频 B 应该是一个 6 分钟左右的视频,但是打开后显示总时长为 10h ( A 视频的长度),请问要怎么解决?

    6 条回复    2021-02-03 09:38:32 +08:00
    flyhaozi
        1
    flyhaozi  
       2021-02-03 00:05:50 +08:00
    试试这样?
    ffmpeg -ss 00:03:40 -i A.mp4 -t 00:05:59 B.mp4

    -ss 在 input 前面的话,to 就和 t 的效果一样了,变成了剪 9 分多钟的视频,不过也不应该是 10 小时
    https://trac.ffmpeg.org/wiki/Seeking#Cuttingsmallsections
    Shingekinoshinji
        2
    Shingekinoshinji  
    OP
       2021-02-03 00:14:28 +08:00
    @flyhaozi
    谢谢,我使用了这样的方式后显示出来的时长几乎是正确的了,但是没办法精确的剪切到我想要的开头和结尾。我查到这好像是 ffmpeg 关于关键帧的一个问题,在添加了 -accurate_seek 与-avoid_negative_ts 1 参数后还是不行,请问是不是没有简单的方法可以解决呢?
    flyhaozi
        3
    flyhaozi  
       2021-02-03 00:25:52 +08:00
    @Shingekinoshinji 你是加了-c copy 选项吗?从上面那个文档来看,好像是必须有转码才能进行精确到帧的剪辑。
    我之前都是用这个命令进行没那么精确的剪辑
    msg7086
        4
    msg7086  
       2021-02-03 01:42:14 +08:00 via Android
    @Shingekinoshinji 一般的视频最小剪辑单位是 gop 而不是帧。如果要精确到帧的话需要重新压制,而不仅仅是剪辑。
    Lanceliel
        5
    Lanceliel  
       2021-02-03 08:24:32 +08:00 via Android
    如果精确到帧非常重要,可以用 -intra 将视频转为帧内编码再剪
    Shingekinoshinji
        6
    Shingekinoshinji  
    OP
       2021-02-03 09:38:32 +08:00
    @flyhaozi
    @msg7086
    @Lanceliel
    明白了,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2768 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:00 · PVG 22:00 · LAX 06:00 · JFK 09:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.