ffmpeg使用TBD

Posted kimiandkevin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg使用TBD相关的知识,希望对你有一定的参考价值。

    • 动态设置视频分辨率

    将输入的1920x1080缩小到800:600输出:

    1
    ffmpeg -i input.mp4 -vf scale=800:600 output.mp4


    ps: 如果540不写,写成-1,即scale=800:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。

    1
    ffmpeg -i input.mp4 -vf scale=800:-1 output.mp4
  • 码率控制

码率控制对于在线视频比较重要。因为在线视频需要考虑其能提供的带宽。

那么,什么是码率?很简单: 
bitrate = file size / duration 
比如一个文件20.8M,时长1分钟,那么,码率就是: 
biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps 
一般音频的码率只有固定几种,比如是128Kbps, 
那么,video的就是 
video biterate = 2831Kbps -128Kbps = 2703Kbps。

那么ffmpeg如何控制码率。 
ffmpg控制码率有3种选择,-minrate -b:v -maxrate 
-b:v主要是控制平均码率。 
比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。 

1
ffmpeg -i input.mp4 -b:v 2000k output.mp4


上面把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了。目测接近一半。 
不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize 
-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好) 

1
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

-minrate -maxrate就简单了,在线视频有时候,希望码率波动,不要超过一个阈值,可以设置maxrate。 

 

1
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

以上是关于ffmpeg使用TBD的主要内容,如果未能解决你的问题,请参考以下文章

使用 FFmpeg 通过管道输出视频片段

使用 ffmpeg 生成单个 MPEG-Dash 片段

如何用ffmpeg截取视频片段&截取时间不准确的坑

PHP ffmpeg_php测试片段

ffmpeg转码重置文件的开始时间

使用 FFmpeg 在 iOS 上编写时将 fMP4 转码为 HLS