我可以重复使用两个通行证日志吗?
这就是说:我正在做这件事,但我不知道我是否应该这样做。ie:从-pass 2输出中具有不同的crf/b:v参数的-pass 1会产生相同的结果吗?对每个输入都进行唯一编码吗?我有一种感觉,我不应该重用pass1。
假设我在做测试,对于相同的输入文件,会产生多个2通输出,并且有不同的受限比特率/crf变体.
例:
约束Q-br9M-crf12.webm
constrainedQ-br12M-crf18.webm
constrainedQ-br14M-crf18.webm
constrainedQ-br16M-crf18.webm
是否可以检测先前的日志文件,检查是否为相同的输入文件生成日志文件,并通过跳过-pass 1进行后续呈现来重用它?(在这种情况下,ffmpeg找到现有的日志,并将其用于pass 2)
或
当比特率或crf发生变化时,我是否应该重新生成pass 1日志?
编辑每个人都喜欢一些上下文代码。
f_rm2passFilesVP9() {
rm \
"${input%/*}/ffmpeg2pass-0.log" \
"${input%/*}/ffmpeg2pass-0.log.temp" \
"${input%/*}/ffmpeg2pass-0.log.mbtree.temp" &> /dev/null
}
...
f_2passLogForThisInputExists() {
if [[ "$input" == $(cat "${input%/*}/.priorInput" 2> /dev/null) ]];then
echo 1
else
echo 0
fi
}
...
if [[ 0 == $(f_2passLogForThisInputExists) ]];then
echo " ENCODING CONSTRAINED QUALITY br:$br crf:$CRF - PASS 1/2"
trap "f_rm2passFilesVP9" 1 2 3 6
ffmpeg -hide_banner -y -i "${input}" \
-c:v libvpx-vp9 -pass 1 -b:v "$br" -crf "$CRF" -threads 4 \
-tile-columns 6 -frame-parallel 1 \
-an -f webm /dev/null
echo "$input" >"${input%/*}/.priorInput"
trap "" 1 2 3 6
else
echo "REUSING - PASS 1 FOR THIS INPUT - PASS 1/2"
fi
echo "ENCODING CONSTRAINED QUALITY br:$br crf:$CRF - PASS 2/2"
ffmpeg -hide_banner -y -i "${input}" \
-c:v libvpx-vp9 -pass 2 -b:v "$br" -crf "$CRF" -threads 4 -speed 2 \
-tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 \
-c:a libopus -b:a 64k -f webm \
"${exportName}"发布于 2020-06-24 16:31:13
这应该是可以的,如果你只是简单地给它或多或少的比特率。我有时会这样做,但我也使用了很多区域,所以我通常只是重新运行第一遍,因为我知道区域肯定会在第一遍文件中起作用。如果我在创建第一个pass文件之后添加一个区域,那么它将在整个文件中应用比特率的差异,如果在此之前这样做,则区域比特率修饰符只应用于指定的帧。由于我认为您只是简单地提供文件或多或少的比特率,那么发行版应该基本相同。我想说的是,如果你的第二次测试的比特率要高得多,比如20%或更高,那么只能重新运行第一次。如果可能的话,最好以您想要编码的最高比特率运行第一次通过。
https://stackoverflow.com/questions/60122204
复制相似问题