windows下FFmpeg使用方法
一、Windows版本的安装
-
到官网下载windows版本的ffmpeg,下载完后解压文件放到自己想入到的地方
-
复制 \bin 文件夹的目录
image.png
[图片上传失败...(image-1ecded-1542091623251)] -
在“此电脑”上 右键——属性——高级系统设置 在高级选项卡点击 环境变量
image.png
[图片上传失败...(image-aa7b6e-1542091623251)] -
在系统变量下找到path,然后点击编辑,再点新建,将刚才复制的 \bin\ 地址粘贴进去
image.png
[图片上传失败...(image-362ad5-1542091623251)]5.windowr+R键,运行cmd,输入ffmpeg,若显示如下,则表示安装成功了
image.png
[图片上传失败...(image-285f76-1542091623251)]
二、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
后面跟输入文件的路径,如果有空格,用""
包起来 -
编码方式`
-
-c:v
设置视频编码的方式,可以用-vcode
代替,后面跟libx264代表用libx264的方式编码 -
-c:a
设置音频编码的方式,可以用-acode
代替,后面跟aac代表用aac方式编码 -
-b:a
设置音频码率,同样 -b:v设置视频码率 b代表bitrate
-
-
选择CRF值
-crf
选择crf的值,- CRF标度的范围是0-51,其中0是无损的,23是默认值,51是最差的质量。较低的值通常会导致更高的质量,一般建议的范围是17-28。17或18在视觉上几乎无损,但它在技术上并不是无损的。
- CRF值是指数级的,因此增加CRF值+6会导致大约一半的比特率/文件大小,而-6会导致大约两倍的比特率。
- 如果输出看起来不错,那么可以尝试更高的值让视频体积变小,如果看起来不好,请选择较低的值来提高视频质量。
CRF模式只关心视频质量,无法精确控制文件大小
当输出文件大小不太重要时,此方法允许编码器尝试为整个文件实现特定的输出质量。一次编码便提供了最大的压缩效率。通过为每个帧调整所谓的量化器,为达到视频指定质量灵活地调动比特率。缺点是您不能告诉它控制文件大小或比特率,这意味着不建议使用此方法来编码流媒体。 -
选择预设值
-preset
`选择如下预设值- ultrafast
- superfast
- veryfast
- faster
- fast
- medium – 默认设置
- slow
- slower
- veryslow
- 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
五、参考文档
参考网站:
-