windows下FFmpeg使用方法

2018-11-04  本文已影响0人  刘伟业

一、Windows版本的安装

windows发行版官网下载

  1. 到官网下载windows版本的ffmpeg,下载完后解压文件放到自己想入到的地方

    1. 复制 \bin 文件夹的目录
      [图片上传失败...(image-1ecded-1542091623251)]

      image.png
    2. 在“此电脑”上 右键——属性——高级系统设置 在高级选项卡点击 环境变量
      [图片上传失败...(image-aa7b6e-1542091623251)]

      image.png
    3. 系统变量下找到path,然后点击编辑,再点新建,将刚才复制的 \bin\ 地址粘贴进去
      [图片上传失败...(image-362ad5-1542091623251)]

      image.png

      5.windowr+R键,运行cmd,输入ffmpeg,若显示如下,则表示安装成功了
      [图片上传失败...(image-285f76-1542091623251)]

      image.png

    二、H.264编码

    FFmpeg转H.264gh ,官方建议两种速率控制模式用于一般用途:恒定速率因子(CRF)或双通道ABR。速率控制决定每帧使用多少位。这将确定文件大小以及分发质量的方式。

    恒定速率(CRF)模式

    CRF示例

    ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 128k output.mkv
    
    
    • 输入文件 -i input.avi -i后面跟输入文件的路径,如果有空格,用""包起来

    • 编码方式`

      1. -c:v 设置视频编码的方式,可以用-vcode代替,后面跟libx264代表用libx264的方式编码
      2. -c:a 设置音频编码的方式,可以用 -acode 代替,后面跟aac代表用aac方式编码
      3. -b:a 设置音频码率,同样 -b:v设置视频码率 b代表bitrate
    • 选择CRF值
      -crf 选择crf的值,

      1. CRF标度的范围是0-51,其中0是无损的,23是默认值,51是最差的质量。较低的值通常会导致更高的质量,一般建议的范围是17-28。17或18在视觉上几乎无损,但它在技术上并不是无损的。
      2. CRF值是指数级的,因此增加CRF值+6会导致大约一半的比特率/文件大小,而-6会导致大约两倍的比特率。
      3. 如果输出看起来不错,那么可以尝试更高的值让视频体积变小,如果看起来不好,请选择较低的值来提高视频质量。

      CRF模式只关心视频质量,无法精确控制文件大小
      当输出文件大小不太重要时,此方法允许编码器尝试为整个文件实现特定的输出质量。一次编码便提供了最大的压缩效率。通过为每个帧调整所谓的量化器,为达到视频指定质量灵活地调动比特率。缺点是您不能告诉它控制文件大小或比特率,这意味着不建议使用此方法来编码流媒体。

    • 选择预设值
      -preset `选择如下预设值

      1. ultrafast
      2. superfast
      3. veryfast
      4. faster
      5. fast
      6. medium – 默认设置
      7. slow
      8. slower
      9. veryslow
      10. placebo –这个预设可以忽略,几本用不到了
        可以用-preset help来查看可用的预设参数,在crf模式下,如果预设值越快,因视频质量是固定的,这就导致视频的体积变大,减慢预设值可以减小视频体积,但牺牲编码时间。在双通道模式下,码率是固定的,越慢的预设可以带来越高的视频质量
    平均码率(二次编码ABR模式)

    如果您要定位特定的输出文件大小,并且帧与帧之间的输出质量不太重要,请使用此方法。
    官方不建议只使用一次编码ABR模式

    二次编码ABR模式示例

    ffmpeg -y -i input -c:v libx264 -b:v 1024k -pass 1 -an -f mp4 nul && ^
    ffmpeg -i input -c:v libx264 -b:v 1024k -pass 2 -c:a aac -b:a 128k output.mp4
    
    
    • 在第1和第2 遍中,分别使用-pass 1-pass 2选项。
    • 在第1遍中,输出到空文件描述符,而不是实际文件。(这将生成ffmpeg第二次传递所需的日志文件。)
    • 第1遍中,您需要指定一个输出格式(使用-f),该格式与您在第2阶段中使用的输出格式相匹配。
    • 在第1遍中,您可以通过指定-an不编码音频加快速度(n代表no)

    关于比特率的计算,这里举个例子
    您的视频长度为10分钟(600秒),输出为200Mb。由于比特率=文件大小/持续时

    (200 Mb * 8192 [将Mb转换为kb])/ 600秒= 2730 kb/s总比特率
    2730  -  128 kb/s(所需音频比特率)= 2602kb/s视频比特率
    
    

    三、利用批处理,批量转码

    当有大量视频需要转码时,可以使用如下命令行工具批量处理:

    for /r %v in (*.mp4) do (ffmpeg -i %v -c:v libx264  -preset slow -crf 28 -c:a copy "ffmpeg\%~nv.mp4")
    
    

    四、FFmpeg截取视频

    基本剪切方法
    ffmpeg -i input.mp4 -ss 00:01:00 -t 60 -c copy cut.mp4
    
    

    参数分析
    -ss 开始时间 -t持续时间 -c copy表示不转码直接复制编码。上段代码表示从00:10:00开始往后截取60秒的视频不转码保存为cut.mp4
    可以用-ss -to来截取某个时间到某个时间点,而不用-t设置持续时间
    这种方法由于不一定seek到关键帧上,所以很可能出现黑屏

    先seek后剪切
    ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy cut.mp4
    
    

    -ss-i之前,先进行seek操作,可以seek到关键帧上,避免出现黑屏

    加以在 -i前加上 -accurate_seek使剪切时间更加精确

    ffmpeg -ss 00:01:00 -to 00:02:00 -accurate_seek -i input.mp4 -c copy cut.mp4
    
    

    五、参考文档

    参考网站:

上一篇下一篇

猜你喜欢

热点阅读