ffmpeg基础命令

ffmpeg基础命令

  1. 编码转换–01

    source:被转换视频

    acodec:用来指定音频编码器

    libmp3lame:mp3编码器

    ar:设置音频采样率,默认使用原音频采样率。一般为48hz和44.1hz

    ab:指定音频的比特率,默认为128k

    ac:用来设置声道数,1表示单声道,2表示双声道立体声,默认采用原音频的声道数

    dst:转换后视频

    ffmpeg -i sorce -acodec libmp3lame -ar 44100 -ab 320k -ac 2 dst
    
  2. 属性查看
    ffprobe source
    
  3. 编码转换–02

    s:缩放视频尺寸,后面的数值即为新视频的尺寸

    pix_fmt:设置颜色缩放空间

    vcodec:用来设置视频流的编码格式

    preset:编码器预设

    profile:v:用来指定编码器的配置,这个配置主要与压缩比有关

    level:v:对编码器具体配置的规范和限制

    crf:用来设置码率控制模式,0表示无损画质

    r:设置每秒的帧数

    b:a:用来设置比特率

    ffmpeg -i souce -s 1920X1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -r 30 -b:a 128k dst
    
  4. 码率控制模式

    画质越好,要求的码率就越高,文件体积也越大。所谓的码率控制,就是为每一帧画面分配多少比特数,这是在权衡文件体积和画面质量。ffmpeg一共支持3中码率控制模式,分别为-qp,-crf,-b。

    • qp(Constant Quantizer)恒定量化器模式

      量化器指利用特殊算法,将画质转化为数字。这样,每一帧画质都可以通过这些量化参数来进行判定,这些量化参数是可以手动设置的(不建议)。

      在qp模式下,画质被划分为0~51个级别,0代表无损画质。用qb模式压制视频,每一帧画质级别都能达到设置好的质量,严格遵循量化参数来编码,这么一来,它的画质是最好的,体积也是最大的,非常非常大,所以一般不使用这种码率控制模式,除非想无损压制视频。

      无损压缩的例子(快速编码)
      ffmpeg -i souce -vcodec libx264 -preset ultrafast -qp 0 dst
      无损压缩的例子(高压缩比)
      ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 dst
      
    • crf(Constant Rate Factor)恒定速率因子模式

      crf模式就是一个浮动的qp模式,它按照特定的标准根据人眼的特点给予每帧画面不同的量化参数。某些画面的质量高一点或者低一点是人眼难以察觉的,那么我们可以降低一点码率,然后把这些省下来的码率用到视觉敏感的画面里,这么以来,画质的变化不大,但码率却降低了不少,文件体积自然也变小了。至于浮动范围,我们也可以手动设置(不推荐)。这是最适合大众的码率控制模式,我们一般视频就用它。

    • b(bitrate )固定目标码率模式

      使最终文件的整体码率与我们给定的码率相等,这么一来,视频文件的体积和码率都是确定的,可用于对视频码率和体积有限制的情景。一般网站都有这方面的限制,如果有视频上传需求,并且希望在有限条件下达到最高画质,可以考虑使用这种码率控制模式。

    以上三种模式默认都是单遍编码, 在使用qp或crf模式的时候,最好搭配veryslow预设,这样以来,参数控制更精准一些。b模式默认采用VBR(Variable Bit Rate/动态比特率)编码,简单的内容少给码率,复杂的内容多给码率。现在的网络视频都是采用ABR(Average Bit Rate/平均比特率)来编码,如果VBR的码率变化太大,用户的设备和网络又不好的情况下,很容易造成花屏或者黑屏。CBR(Constant Bit Rate/恒定比特率),是在ABR的基础上附加一些指令,让码率尽可能的固定在一个数值上,这种方式几乎无人使用。

  5. 提取视频

    copy:保持原编码格式

    an:用来实现静音,即剔除音效

    ffmpeg -i source -vcodec copy -an dst
    
  6. 提取音频

    copy:保持原编码格式

    vn:剔除视频,保留音频

    ffmpeg -i source -acodec copy -vn dst
    

    如果某一个视频具备多个音频流,如果要提取Stream #0:3[0x82]这个音频流,我们要多加一个参数 -map 0:3

  7. 合并视频和音频
    ffmpeg -i source1 -i source2 -c copy dst
    
  8. 截取音频

    ss:截取音频的起始时间,格式为00:00:00(时:分:秒)

    to:截取音频的结束时间,格式如上

    t:设置截取时间,单位为s

    sseof:以音频末尾为标点,结合t可截取末尾多少秒

    ffmpeg -i source -ss 00:01:00 -to 00:01:10 -acodec copy dst
    

    针对-i和-ss参数的位置不同,结果也有差异:

    ffmpeg -i source -ss 00:01:00 -to 00:01:10 -c copy dst
    ffmpeg -ss 00:01:00 -i source -to 00:01:10 -c copy dst
    ffmpeg -ss 00:01:00 -i source -to 00:01:10 -c copy -copyts dst
    

    当我们将-ss参数放在-i参数之前时,ffmpeg会启用关键帧技术,这可以加速截取操作。但是这样截取出来的额视频,在播放器的显示中,它的起始时间和结束时间不一定准确。我们可以通过第三条命令进行改进,它保留了时间戳,这样就可以保证时间的准确性。

  9. 音视频连接
    ffmpeg -i "concat:source1|source2|source3" -c copy dst
    

    视频参数不一致时,也可以进行音视频连接。但是,操作起来非常麻烦。可以使用Avidemux这款开源免费软件,专门用来截切合并视频,有图形界面,易于操作。

  10. 图片截取

    截取第5秒的第一帧画面,vframes用来指定第几帧

    ffmpeg -i source -ss 5 -vframes 1 dst
    
  11. 在视频中添加水印

    filter_complex:用来添加滤镜(这里的滤镜则为要添加的水印)

    “overlay=20:20”:表示水印在离左边20个像素,离顶部20个像素的位置

    ffmpeg -i source1 -i source2 -filter_complex "overlay=20:20"
    
  12. 制作gif动图
    ffmpeg -i source -ss 7.5 -to 8.5 -s 640x320 -r 15 dst.gif
    
  13. 屏幕录制

    f:格式化指令

    ffmpeg -f gdigrab -i desktop dst
    

    gdigrab是ffmpeg的一个组件,用来捕获视频设备,不同的操作系统它的视频捕获工具也不一样。在windows系统中,ffmpeg默认使用的就是gdigrab,它目前只支持捕获视频,不支持捕获音频。如果我们需要录屏,录音,获取摄像头和麦克风的话,推荐使用OBS Studio,开源免费。

  14. 录播

    re:让软件按照视频的帧率进行推流

    ffmpeg -re -i source 按照网站要求编码 -f flv "你的rtmp地址/你的直播码"
    

你可能感兴趣的:(Software,ffmpeg)