美文网首页
FFmpeg 使用心得(待续)

FFmpeg 使用心得(待续)

作者: 石先 | 来源:发表于2017-12-05 15:15 被阅读127次

    1. 有些命令不能同时使用

    比如:当指定视频文件的音频编码方式为 copy 时进行 areverse (反转)

    ffmpeg -i in.mp4 -vcodec copy -acodec copy -af areverse out.mp4
    
    错误提示:
    Filtergraph 'reverse' was defined for audio output stream 0:1 but codec copy was selected.
    Filtering and streamcopy cannot be used together.
    

    与此类似的情况还有:
    指定指定视频文件的视频编码方式为 copy 时进行 reverse (反转)

    ffmpeg -i in.mp4 -vcodec copy -acodec copy -vf reverse out.mp4
    

    注意这里只是指编码方式为 copy 时会这样,如果是改变为其他编码方式是 OK ,比如下面这样:

    // 指定视频编码器为 libx264 ,此时可以同时使用 reverse 命令
    ffmpeg -i in.mp4 -vcodec libx264 -preset fast -vf reverse out6.mp4
    

    像这样处理,看起来不会有之前说的问题,但是这样也会可能出现新的弊端,具体请继续看下面的问题:

    2. 减少不必要的编码过程

    在只是处理指定码流时,不需要处理的流直接 copy 原有编码方式可节约再次编码时间。

    比如在移除音频时,对视频流进行重新编码:

    ffmpeg -i in.mp4 -vcodec libx264 -preset fast -an out.mp4
    

    这样回导致进行逐帧重新编码,即使使用了 libx264 的快速编码,也会耗费大量执行时间:

    而如果是直接复制原有视频编码方式进行:

    ffmpeg -i in.mp4 -vcodec copy -an out.mp4
    

    可以说是秒编译,速度和上面那种是有天差地别的差距,所以一定要注意指定编码方式时判断是否有必要进行重新编码,直接 copy 的方式会快很多很多。

    同理,去除视频轨时,如果也不改变编码方式,下面这样也会快很多:

    ffmpeg -i in.mp4 -vcodec  libx264 -preset fast -acodec copy -vn out4.mp4
    

    但是有一点要注意,如果是反转视频流时,即使是直接 copy 原有编码方式也会重新逐帧编码,所以此时指定新的编码方式也是可以考虑的,比如反向视频流时指定编码器为 libx264 :

    ffmpeg -i in.mp4 -vcodec  libx264 -preset fast -acodec copy -vf reverse out.mp4
    

    对比直接 copy 编码方式进行编译:

    ffmpeg -i in.mp4 -vf reverse out9.mp4
    

    这时候其实两者谁快谁慢都不一定,但是有些场景下使用 x264 进行编码的可操作更强。

    3. 注意命令执行的潜在条件

    在某些情况下,命令执行会有潜在的潜在条件,比如当我们希望把视频文件转成音频文件时反转音轨,除了明显文件格式转换外,其实这里面还有个潜在条件就是:去除视频轨只保留音轨处理。如果先满足去除视频轨的前置条件后,就可以减少格式转换时额外的视频编码过程。

    具体效果我们可以试验一下:

    ffmpeg -i in.mp4 -af areverse out1.mp3
    

    相关文章

      网友评论

          本文标题:FFmpeg 使用心得(待续)

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