FFmpeg

来自Tsetien’s Wiki
跳转到导航 跳转到搜索

移除或写入后设资料

remove all metadata
-map_metadata -1 -map_chapters -1 -metadata:s handler_name= -metadata:s vendor_id= -disposition 0
或透过组合选用以下来按需添加。须知:不是所有的档案类型/容器都支援以下所有的关键字。
album
-metadata album=""
album artist
-metadata album_artist=""
artist
-metadata artist=""
author
-metadata author=""
comment
-metadata comment=""
compilation
-metadata compilation=""
composer
-metadata composer=""
date
-metadata date=""
disc (no/total)
-metadata disc=""
episode ID
-metadata episode_id=""
episode sort
-metadata episode_sort=""
genre
-metadata genre=""
grouping
-metadata grouping=""
language
-metadata language=""
location
-metadata location=""
lyrics
-metadata lyrics=""
make
-metadata make=""
model
-metadata model=""
network
-metadata network=""
performer
-metadata performer=""
publisher
-metadata publisher=""
season number
-metadata season_number=""
show
-metadata show=""
synopsis
-metadata synopsis=""
title
-metadata title=""
track (no/total)
-metadata track=""

downscaling

使用

-vf format=gbrpf32le,zscale=transferin=bt709:transfer=linear,zscale=w='if(gte(iw,ih),min(1280,iw),-2)':h='if(lt(iw,ih),min(1280,ih),-2)':f=lanczos:param_a=4:param_b=0.6:dither=error_diffusion,zscale=transferin=linear:transfer=bt709,unsharp=5:5:0.5:3:3:0.0,format=yuv444p10le,setsar=1

来 down­sc­a­le, 此处以 down­sc­a­le 到使其长边不超过 1280 px 为例。

其中,dither=error_diffusion 部分可以改为 dither=none 来不添加任何 di­the­ring, 或删去以让 ffmpeg 采用预设。

加入 hqdn3d=1:1:2:2, 直接在 -vf  后面可略微“抹匀”(de­no­i­sing) 画面。更强烈的“抹匀”效果可以透过调整 hqdn3d 的值来实现,比如改用 hqdn3d=1.5:1.0:3:2,hqdn3d=2:1:2:1,.

便利贴:

no dithering
-vf format=gbrpf32le,zscale=transferin=bt709:transfer=linear,zscale=w='if(gte(iw,ih),min(1280,iw),-2)':h='if(lt(iw,ih),min(1280,ih),-2)':f=lanczos:param_a=4:param_b=0.6:dither=none,zscale=transferin=linear:transfer=bt709,unsharp=5:5:0.5:3:3:0.0,format=yuv444p10le,setsar=1
no dithering, no sharpening
-vf format=gbrpf32le,zscale=transferin=bt709:transfer=linear,zscale=w='if(gte(iw,ih),min(1280,iw),-2)':h='if(lt(iw,ih),min(1280,ih),-2)':f=lanczos:param_a=4:param_b=0.6:dither=none,zscale=transferin=linear:transfer=bt709,format=yuv444p10le,setsar=1
having both diffusion and hqdn3d
-vf hqdn3d=1:1:2:2,format=gbrpf32le,zscale=transferin=bt709:transfer=linear,zscale=w='if(gte(iw,ih),min(1280,iw),-2)':h='if(lt(iw,ih),min(1280,ih),-2)':f=lanczos:param_a=4:param_b=0.6:dither=error_diffusion,zscale=transferin=linear:transfer=bt709,unsharp=5:5:0.5:3:3:0.0,format=yuv444p10le,setsar=1
no dithering, but with hqdn3d
-vf hqdn3d=1:1:2:2,format=gbrpf32le,zscale=transferin=bt709:transfer=linear,zscale=w='if(gte(iw,ih),min(1280,iw),-2)':h='if(lt(iw,ih),min(1280,ih),-2)':f=lanczos:param_a=4:param_b=0.6:dither=none,zscale=transferin=linear:transfer=bt709,unsharp=5:5:0.5:3:3:0.0,format=yuv444p10le,setsar=1

若 sc­a­ling 的原则是依照短边不超过 720 px 为准,则可将以上命令块中的 zscale=w='if(gte(iw,ih),min(1280,iw),-2)':h='if(lt(iw,ih),min(1280,ih),-2)' 部分以 zscale=w='if(lt(iw,ih),min(720,iw),-2)':h='if(gte(iw,ih),min(720,ih),-2)' 取代之。

使用封面图片与歌曲来制作歌曲的视讯档

参考以下两个模板——

1080p crf 25 + 256kVBR
ffmpeg -loop 1 -i cover.png -i song.wav -vf format=rgba64le,colorchannelmixer=aa=1,crop='floor(min(iw,ih)/2)*2:floor(min(iw,ih)/2)*2',scale=-2:1080:flags=lanczos+accurate_rnd+full_chroma_inp+full_chroma_int:param0=4,format=yuv444p10le,setsar=1 -r 1 -c:v libsvtav1 -pix_fmt yuv420p10le -preset 1 -crf 25 -g 720 -svtav1-params "tune=0:enable-qm=1:aq-mode=1:lookahead=120:scd=1" -c:a libopus -b:a 256k -t hh:mm:ss.xx -map_metadata -1 -map_chapters -1 -metadata:s handler_name= -metadata:s vendor_id= -disposition 0 -metadata album="" -metadata album_artist="" -metadata artist="" -metadata composer="" -metadata date="" -metadata genre="" -metadata title="" "output.webm"
720p crf 23 + 160kVBR
ffmpeg -loop 1 -i cover.png -i song.flac -vf format=rgba64le,colorchannelmixer=aa=1,crop='floor(min(iw,ih)/2)*2:floor(min(iw,ih)/2)*2',scale=-2:720:flags=lanczos+accurate_rnd+full_chroma_inp+full_chroma_int:param0=4,format=yuv444p10le,setsar=1 -r 1 -c:v libsvtav1 -pix_fmt yuv420p10le -preset 1 -crf 23 -g 720 -svtav1-params "tune=0:enable-qm=1:aq-mode=1:lookahead=120:scd=1" -c:a libopus -b:a 160k -t hh:mm:ss.xx -map_metadata -1 -map_chapters -1 -metadata:s handler_name= -metadata:s vendor_id= -disposition 0 -metadata album="" -metadata album_artist="" -metadata artist="" -metadata composer="" -metadata date="" -metadata genre="" -metadata title="" "output-small.webm"

不要尝试使用 -shortest 来取代 -t hh:mm:ss.xx (具体时间须视歌曲时长手动填入), 因为这样得出的长度一定是长于歌曲的具体时长的。

libsvtav1

AV1 在任何情况下都应当仅作为网路分发考虑,如果以在地搜藏为目的,仍需认准 H265. 一个 crf 在 20 到 23 之间的 veryslow 的 H265 至今仍可在任何方面(除了速度)远超 AV1.

在前述的前提下,AV1 在低位元速率的应用场合中,表现还是要远好于 H264 的,因此比较适合在网路上使用。

总体上来说,可以套用以下设定——

-c:v libsvtav1 -pix_fmt yuv420p10le -preset 2 -crf 33 -svtav1-params "tune=0:enable-qm=1:aq-mode=1:lookahead=120:scd=1"

来压出一个看起来还说得过去的质量。crf 设在 33 上看起来不高,但是其实调高(其实是调低)它的设定也未见得能将画质提高到哪里去,反而会徒增档案的大小,得不偿失。libsvtav1 的优势在于速度快,而且在低位元速率下效果好,因此维持 crf 设在 33 上其实并不太过“低劣”,如果画面内容动得厉害,还可以降至 36, 39, 42, 乃至 45——到 45 就确实有点渣了,但也不是不能看。如果画面著实平稳,少有动的,则减到 30 或者 27 就了得了,再减并无任何必要,要时刻铭记,AV1 只适合在网路上分发,因此低位元速率下一个看得过去的画质才是 AV1 的长处。