FFmpeg心得记录(一)

本文介绍了使用FFmpeg进行视频编码的实践经验,包括libx264和h264_nvenc编码器的参数设置。libx264编码中,crf模式、preset和qp参数被详细讨论,而h264_nvenc利用NVIDIA显卡加速,显著提升了编码速度。文章还提供了批处理处理多个视频文件的方法。
摘要由CSDN通过智能技术生成


前言&常见问题

并非专业介绍,只是萌新刚使用的心得,有些问题可能你不会发生,或者本文介绍的并不严谨_(:з)∠)_据说大部分编码软件内核就是ffmpeg。从上到下记录重要的点,尽量不重复,看不懂就往上翻翻。

  1. 输出输入目录是否加双引号:如果目录文字不含特殊符号可以不用加。
  2. 编码器参数最好先自己看一遍,这里不做详细介绍,可以用ffmpeg -h encoder=编码器名字看到相关参数

一、libx264编码

网上找的一个B站4K输出(示例,为方便观看进行了换行!):点击跳转

ffmpeg -i 输入目录 -c:v libx264 -profile:v main -b:v 19000k -r 60 -x264opts crf=12 
-profile:v main -preset veryslow  -c:a aac -b:a 192k  -maxrate:v 60000k -bufsize 60000k -pix_fmt yuv420p  输出目录

不知道为什么有2个-profile:v main

-c:v是视频编码器,后面的:v是指video,会经常用到。

-profile,-crf,-profile 是libx264的参数,参数介绍说的很详细。要注意的是preset是越慢质量越高,部分编码都有类似选项。其中crf模式相对于8bit量化比例范围是0-51,10bit是0-63(不知道怎么手动调整10bit,默认就当作8bit吧)。最常用的8bit为例18~28为合适范围。crf加6,视频码率减半,相反则翻倍。配合crf 模式使用的时候,如果设置的 crf 值过低,视频码率可能超出 maxrate 的时候,编码器会自动调整 crf,避免出现较大的码率波动。然而,x264不会严格控制你指定的最大码率,除非使用 2 pass 模式。

-r和-b:v是帧数和码率,这些参数不会在编码器参数里显示,类似公共参数。vbr编码视频好像会自动识别,-b变成平均帧率?

-maxrate 码率峰值,-bufsize码率缓冲区大小,一般是maxrate=bufsize

-c:a和-b:a就是audio相关的了,很多专业编码工具和录像工具都有。

-pix_fmt yuv420p是像素格式,大部分用不到。

无损压缩

ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 output.mkv ,用qp=0代替crf=0是因为8bit和10bit视频的crf=0底层参数不一样。

小结:

  1. libx264的crf模式不能使用-pass 2,具体怎么使用2pass没研究了。这个编码速度很慢。
  2. -profile:v mian crf=18可能某些画面会部分花屏(不是全屏花了),-profile:v high就不会了。
  3. CPU编码,直接100%占用拉满了。

二、h264_nvenc编码

上面B站4K命令行改的(示例,为方便观看进行了换行!):

ffmpeg -i "输入目录"   -c:v h264_nvenc  -profile:v high   -level 5.1 -rc vbr -preset slow -bf 2 -cq 25 -b:v 19000k  
-maxrate:v 60000k -bufsize 60000k  -c:a copy   "输出目录"

部分参数都是参考他人在部分编码软件的预设配置,套用到ffmpeg里面,毕竟内核都是ffmpeg。具体意思百度都有就不说了,都是照搬也不懂。不过ffmpeg -h encoder=h264_nvenc能看到该编码特有参数。

-bf2 使用2个B帧,支持mpeg1,mpeg2,mpeg4(即如果-bf 2的话,在两个非b帧中间隔的b帧数目为2,即IBBPBBPBBP结构),很多地方都是这样介绍的,去掉也感觉不到区别。。。。。。

-cq就是h264_nvenc自带的了,是动态编码的一个质量,越低越好。
vbr编码视频好像会自动识别,-b变成平均帧率?

小结:

  1. 用N卡编码,速度提升飞快。

批处理

处理该文件夹所有MP4

以标题二的h264_nvenc举例(示例,为方便观看进行了换行!)参考链接

for %%i in (.\*.mp4) do ffmpeg -i "%%i"   -c:v h264_nvenc  -profile:v high   -level 5.1 -rc vbr -preset slow -bf 2 
-cq 25 -b:v 19000k  -maxrate:v 60000k -bufsize 60000k  -c:a aac -b:a 192k    "%%~dpni_new.mp4"

新建文本复制进去,另存为后缀改为bat,编码为ANSI。放到需要编码的视频文件夹里双击就把该文件夹的mp4视频全编码了。
简单介绍%i(.\*.mp4)里后缀为mp4的文件,for %i in (.\*.mp4) do就是指这个目录下的所有后缀为mp4的文件都执行下列操作。%~dpni1就是这个文件的盘符,文件夹名,文件名照抄过来。然后接了个自定义的_new.mp4。例如1.mp4处理完就在原目录下生成一个1_new.mp4文件,批处理中的for写法系统会屏蔽一个%,所以多加一个%,cmd窗口中不用。

只处理拖拽文件

示例(为了方便观看进行了换行):

ffmpeg -i "%~dpnx1"   -c:v h264_nvenc  -profile:v high   -level 5.1 -rc vbr -preset slow -bf 2 -cq 25 -b:v 19000k  
-maxrate:v 60000k -bufsize 60000k  -c:a aac -b:a 192k    "%~dpn1_new.mp4"

会在源文件所在处新建一个原名_new.mp4文件

总结

继续完善中;


  1. %~dpni里的i和 %~dpn1,没找到区别在哪,不过写成i的时候经常在for语句里。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值