ffmpeg视频剪切与合并

作者: SHUTUP | 来源:发表于2016-04-30 20:42 被阅读12153次

    剪切视频

    ffmpeg -ss 00:00:00 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy output.mp4
    * -ss 指定从什么时间开始
    * -t 指定需要截取多长时间
    * -i 指定输入文件
    

    这个命令就是从00秒开始裁剪到00+30=30秒结束,总共30秒的视频。这个命令执行很快,因为只是原始数据的拷贝,中间没有什么编码和解码的过程。执行这个命令后你能得到output.mp4这个输出文件。你可以用视频播放软件播放这个视频看看。
    可能有些视频裁剪后的效果,如期望一致,00秒开始,30秒结束,总共30秒的视频,但是有些视频裁剪后你会发现可能开始和结束都不是很准确,有可能是从00秒开始,33秒结束。这是为什么呢?
    因为这些视频里30秒处地方刚好不是关键帧,而ffmpeg会在你输入的时间点附近圆整到最接近的关键帧处,然后做接下来的事情。如果你不懂什么是关键帧,没关系,这也不影响你使用这个命令。

    如果你的项目要求能够接受几秒的误差,那么这个命令完全就可以满足你的需要,接下来的内容你也没有必要往下看了。
    如果你的项目里要求很严格,一定要到确定的时间。那么就要用另外一种方式。
    上面的造成那样的原因是所选的时间不是关键帧,那如果我们将输入的视频先转换成所有的帧都为关键帧的视频,其实就是将所有的帧的编码方式转为帧内编码(不理解帧内编码也没关系,你就当没看见它,接着往下看),这个问题就有解了。ffmpeg也可以帮我们完成这个事情。
    ffmpeg -i INPUT -sameq -intra OUTPUT
    -i 输入,后面是空格,紧跟着就是输入视频文件;
    INPUT 输入文件;
    -sameq 表示保持同样的视频质量;
    -intra, 帧内编码;
    OUTPUT 输出文件名。

    如:
    ffmpeg -i ./MyVideo.mpg -sameq -intra ./temp.mpg
    这个命令的结果文件就是./temp.mpg.这个文件的视频和./MyVideo.mpg是一样的,但是你会发现这个文件会比./MyVideo.mpg大很多倍,原因就是转换前一般采用的帧间编码,转换后变成了帧内编码。这里我们说是一般,原因是有些视频文件本身就采用了帧内编码。
    经过这样的处理后,我们就可以精确的剪切视频了。

    注意

    上面的命令在新版本中已经废弃,可以参考下面的命令

    ffmpeg -i output.mp4 -strict -2  -qscale 0 -intra keyoutput.mp4
    

    合并视频

    //截取从头开始的30s
    ffmpeg -ss 00:00:00 -t 00:00:30 -i keyoutput.mp4 -vcodec copy -acodec copy split.mp4
    //截取从30s开始的30s
    ffmpeg -ss 00:00:30 -t 00:00:30 -i keyoutput.mp4 -vcodec copy -acodec copy split1.mp4
    //进行视频的合并
    ffmpeg -f concat -i list.txt -c copy concat.mp4
    

    在list.txt文件中,对要合并的视频片段进行了描述。
    内容如下

    file ./split.mp4
    file ./split1.mp4
    

    相关文章

      网友评论

      • 0d6834a93448:把视频转换成帧内编码之后视频的清晰读下降很多,有什么办法能解决吗?不然合并之后能有什么方法再转换成帧间编码吗?求告知!!!
      • 首席科学家:这是最新的2018版的会声会影破解版可以下载https://www.jianshu.com/p/4a7ad916ca0a ,应该还能用
      • OneBelowZero:你好 ffmpeg -i output.mp4 -strict -2 -qscale 0 -intra keyoutput.mp4 这句代码执行起来 非常慢 请问 有什么解决办法吗?
        陌尚煙雨遙:Unsafe file name './yuanjiang.mp4'
        list.txt: Operation not permitted 这个报错怎么解决
        我系哆啦:这个要改成帧内编码,时间和内存消耗应该都比较多

      本文标题:ffmpeg视频剪切与合并

      本文链接:https://www.haomeiwen.com/subject/znukrttx.html