ffmpeg
硬件编码后缀解释:
qsv:intel显卡的快速视频同步技术(quick sync video)
nvenc:nvidia显卡的硬件视频编码器(nvidia hardware video encoder)
cuvid:nvdec的旧称,只有解码端。
cuda: 同上.nvdec的旧称,只有解码端。
amf:amd显卡的amf硬件编码器(amd hardware encoder)
查看支持
1 2 3 4 5 6 7 8 9 10
| PS C:\Users\asus> ffmpeg -hwaccels
Hardware acceleration methods: cuda dxva2 qsv d3d11va opencl vulkan
|
1 2 3 4 5
| PS C:\Users\asus> ffmpeg -codecs | sls nvenc
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv libopenh264 h264_cuvid ) (encoders: libx264 libx264rgb libopenh264 h264_amf h264_mf h264_nvenc h264_qsv ) DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid ) (encoders: libx265 hevc_amf hevc_mf hevc_nvenc hevc_qsv libkvazaar )
|
1 2 3 4 5 6 7
| PS C:\Users\asus> ffmpeg -decoders | sls 264
VFS..D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 V....D h264_qsv H264 video (Intel Quick Sync Video acceleration) (codec h264) V....D libopenh264 OpenH264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264) V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264)
|
1 2 3 4 5 6 7 8 9 10
| PS C:\Users\asus> ffmpeg -encoders |sls 264
V....D libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264) V....D libx264rgb libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264) V....D libopenh264 OpenH264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264) V....D h264_amf AMD AMF H.264 Encoder (codec h264) V....D h264_mf H264 via MediaFoundation (codec h264) V....D h264_nvenc NVIDIA NVENC H.264 encoder (codec h264) V..... h264_qsv H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)
|
1 2 3 4 5
| ffmpeg -decoders |sls hevc
ffmpeg -encoders |sls hevc
|
命令行及常用参数解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ... ffmpeg -i inputfile1 -i inputfile2 output.mp4
-hwaccel cuvid:使用cuvid进行硬件加速 -c:a copy: 保持音频原编码格式 -c:v copy: 保持视频原编码格式 -c:v h264_cuvid:使用h264_cuvid进行解码 -c:v h264_nvenc:使用h264_nvenc进行编码(nvidia硬件加速x265) -b:v 2000k:比特率,值越大约清晰。 -b:v 3500K :视频平均比特率为 3500K -s 1920x1080:分辨率 -bufsize 6000K:缓存区大小 6000K,建议设定为 当前码率帧率5,也许这里的2pass是针对缓冲区的,缓存未来5s -maxrate 5000K:最大码率为 5000K,每帧的最高码率不超过这个数值 -pix_fmt p010le:输出的像素格式是 p010le 也就10bit,只有新的硬件支持,例如:970m不支持,1070可以支持 -profile:v high:高级画质。 H.264有四种画质级别,分别是baseline, extended, main, high: 1. Baseline Profile:基本画质。 2. Extended profile:进阶画质。(用的少) 3. Main profile:主流画质。 4. High profile:高级画质。在main Profile 的基础上增加了无损视频编码和更多的YUV 格式; 在相同配置情况下,High profile(HP)可以比Main profile(MP)降低10%的码率。 根据应用领域的不同,Baseline profile多应用于实时通信领域,Main profile多应用于流媒体领域,High profile则多应用于广电和存储领域。
-preset slow:预设方案是 slow,slow已经是最好的选项了 ultrafast(转码速度最快,视频往往也最模糊) superfast veryfast faster fast medium(default) slow slower veryslow placebo -crf 28: 恒定速率因子模式,用来设置码率控制模式,0表示无损画质(一般18-28,18为分界线) -qp 28: 恒定量化器模式,用来设置码率控制模式,(0-51)0表示无损画质
|
注意
h264_qsv
解码 不能搭配 `-profile:v high``
``-qp 28不能和
-profile:v high`一起出现,不然视频 有音频 没画面
qp
这类的压缩,应一个输入对应一个输出,若多个输入,应先将多个输入无损编码成一个较大文件,然后再用qp
或crf
这类参数对较大文件进行压缩,以免出现“有音频 没画面”等异常情况
虽然也不怎么会出现,但后者会更接近一点原来的一点
1 2 3
| ffmpeg -hwaccel cuvid -i audio.mp4 -c:v h264_cuvid -i video.mp4 -profile:v high -b:v 0 -c:v h264_nvenc [-preset slow] tempfile.mp4
ffmpeg -hwaccel cuvid -i tempfile.mp4 -qp 28 -c:v h264_nvenc output.mp4
|
1
| ffmpeg -hwaccel cuvid -i audio.mp4 -c:v h264_cuvid -i video.mp4 -profile:v high [-preset slow] [-b:v 0] -qp 28 -c:v h264_nvenc output.mp4
|
普通情况下 Intel 卡和 NVIDIA 输出差不多,但 N卡效果好像好点
1 2 3 4 5
| ffmpeg -hwaccel qsv -i audio.mp4 -c:v h264_qsv -i video.mp4 [-profile:v high] [-preset slow] -c:v qsv output.mp4
ffmpeg -hwaccel cuvid -i audio.mp4 -c:v h264_cuvid -i video.mp4 [-profile:v high] [-preset slow] [-crf 10|18|28] -c:v hevc_nvenc output.mp4
|
N卡配合 bv(非0) 效果很差
1
| ffmpeg -hwaccel cuvid -i audio.mp4 -c:v h264_cuvid -i video.mp4 [-profile:v high] -b:v 10 -c:v hevc_nvenc output.mp4
|
去水印
框出水印位置
1 2 3 4 5 6 7 8 9 10 11
| ffplay -i 1.mp4 -vf delogo=x=0:y=0:w=150:h=100:show=1 [-ss 5] [-t 5]
-vf 自定义滤镜 delogo x:起始横坐标 y:起始纵坐标 w:宽度 h:高度 show:是否显示绿框 0:不显示 1:显示 --s 从第几秒开始 -t 持续几秒(-t 5:即只输出5秒)
|
导出去除水印的视频
1 2 3 4 5 6 7 8
| ffmpeg -i 1.mp4 -vf delogo=x=1120:y=10:w=155:h=100:show=0 -t 5 output1.mp4
ffmpeg -i 1.mp4 -ss 5 -t 20 output2.mp4
ffmpeg -i 1.mp4 -vf delogo=x=10:y=600:w=160:h=100:show=0 -ss 25 -t 剩下的时间 output3.mp4
|
拼接视频
1 2 3 4 5 6
| ffmpeg -f concat -i t.txt -c copy output.mp4
file 'output1.mp4' file 'output2.mp4' file 'output3.mp4'
|