From 1afea2c38a0b47c455ea17fd09f9f4d98dca0486 Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Sat, 30 Jan 2021 18:23:35 +0100 Subject: feature: add option argument --compression=quality to use Constant Quality --- localvideowebencode | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/localvideowebencode b/localvideowebencode index c6ae9eb..7f25361 100755 --- a/localvideowebencode +++ b/localvideowebencode @@ -118,6 +118,7 @@ html favoring open formats with optional non-JavaScript Flash fallback. dirty fast normal fixed fixed medium hq vary fixed slow + quality fixed vary medium (default: normal) -h, --help This help text @@ -245,6 +246,9 @@ case "$compression" in cpu_vp9=1 preset_h264=veryslow ;; + quality) + no_bitrate=yes + ;; *) exit1 "Unknown compression mode \"$compression\".";; esac [ -n "$multipass" ] || singlepass=yes @@ -376,7 +380,7 @@ if [ -n "$_pixels" ] && [ $_pixels -ge $((1024*768)) ]; then fi # compute average bitrate from reference data and "power of .75" rule -if [ -n "$_pixels" ] && [ -n "$_frames" ]; then +if [ -z "$no_bitrate" ] && [ -n "$_pixels" ] && [ -n "$_frames" ]; then bitrate_h264=$(perl -E '$refsize=640*360;' \ -E "say int( +(($_pixels/\$refsize)**0.75*\$refsize*$_frames*$refbpp) )") bitrate_theora=$bitrate_h264 # FIXME @@ -453,10 +457,10 @@ encoder_vp8=libvpx encoder_vp9=libvpx-vp9 encoder_h264=libx264 for vformat in vp8 vp9 h264; do - # melt supports dual-pass mode only for h.264 - [ h264 = "$vformat" ] || [ -n "$vpxenc" ] || [ -z "$multipass" ] || eval "use_ffmpeg_$vformat=yes" + # melt supports dual-pass or Constant Quality modes only for h.264 + [ h264 = "$vformat" ] || [ -n "$vpxenc" ] || eval "[ -z \"$multipass\$crf_$vformat\" ] || use_ffmpeg_$vformat=yes" - eval "[ -n \"\$bandwidth_$vformat\" ] || no_bandwidth_$vformat=yes" + eval "[ -n \"\$bitrate_$vformat\" ] || no_bitrate_$vformat=yes" eval "[ -n \"\$crf_$vformat\" ] || no_crf_$vformat=yes" done if [ -n "$use_ffmpeg_vp8$use_ffmpeg_vp9$use_vpxenc" ]; then @@ -490,13 +494,13 @@ _melt_postfilters_audio="${limit:+-filter ladspa.1077}" # codec options _melt_theora="vcodec=libtheora${bitrate_theora:+ vb=$bitrate_theora} qscale=$qscale_theora" _melt_vp8="vcodec=$encoder_vp8${pre_vp8:+ vpreset=$pre_vp8}${preset_vp8:+ preset=$preset_vp8}${bitrate_vp8:+ vb=$bitrate_vp8 minrate=$((bitrate_vp8/20)) maxrate=$((bitrate_vp8*12))}${crf_vp8:+ crf=$crf_vp8} cpu-used=$cpu_vp8" -_ffmpeg_vp8="-c:v $encoder_vp8${pre_vp8:+ -vpre $pre_vp8}${preset_vp8:+ preset $preset_vp8}${bitrate_vp8:+ -b:v $bitrate_vp8 -minrate $((bitrate_vp8/20)) -maxrate $((bitrate_vp8*12))}${crf_vp8:+ -crf $crf_vp8} -cpu-used $cpu_vp8" +_ffmpeg_vp8="-c:v $encoder_vp8${pre_vp8:+ -vpre $pre_vp8}${preset_vp8:+ preset $preset_vp8}${bitrate_vp8:+ -b:v $bitrate_vp8 -minrate $((bitrate_vp8/20)) -maxrate $((bitrate_vp8*12))}${crf_vp8:+ ${no_bitrate_vp8:+ -b:v 0 }-crf $crf_vp8} -cpu-used $cpu_vp8" _vpxenc_vpx="--min-q=$webm_qmin --max-q=$webm_qmax${multipass:+ --minsection-pct=5 --maxsection-pct=1200} --kf-max-dist=120 --auto-alt-ref=1 --lag-in-frames=$webm_lag --arnr-maxframes=7 --arnr-strength=5 --arnr-type=3" _vpxenc_vp8="--codec=vp8${bitrate_vp8:+ --target-bitrate=$((bitrate_vp8/1000))} --good --end-usage=${no_crf_vp8:+vbr}${crf_vp8:+cq --cq-level=$crf_vp8} --cpu-used=$cpu_vp8 $_vpxenc_vpx --token-parts=$webm_tokenparts_log2" _melt_vp9="vcodec=$encoder_vp9${pre_vp9:+ vpreset=$pre_vp9}${preset_vp9:+ preset=$preset_vp9}${bitrate_vp9:+ vb=$bitrate_vp9 minrate=$((bitrate_vp9/20)) maxrate=$((bitrate_vp9*12))}${crf_vp9:+ crf=$crf_vp9} cpu-used=$cpu_vp9" -_ffmpeg_vp9="-c:v $encoder_vp9${pre_vp9:+ -vpre $pre_vp9}${preset_vp9:+ -preset $preset_vp9}${bitrate_vp9:+ -b:v $bitrate_vp9 -minrate $((bitrate_vp9/20)) -maxrate $((bitrate_vp9*12))}${crf_vp9:+ -crf $crf_vp9} -cpu-used $cpu_vp9" +_ffmpeg_vp9="-c:v $encoder_vp9${pre_vp9:+ -vpre $pre_vp9}${preset_vp9:+ -preset $preset_vp9}${bitrate_vp9:+ -b:v $bitrate_vp9 -minrate $((bitrate_vp9/20)) -maxrate $((bitrate_vp9*12))}${crf_vp9:+ ${no_bitrate_vp9:+-b:v 0 }-crf $crf_vp9} -cpu-used $cpu_vp9" _vpxenc_vp9="--codec=vp9${bitrate_vp9:+ --target-bitrate=$((bitrate_vp9/1000))} --good --end-usage=${no_crf_vp9:+vbr}${crf_vp9:+cq --cq-level=$crf_vp9} --cpu-used=$cpu_vp9 $_vpxenc_vpx --tile-columns=$webm_tokenparts_log2 --tile-rows=$webm_tokenparts_log2" -_melt_h264="vcodec=$encoder_h264${preset_h264:+ vpreset=$preset_h264}${profile_h264:+ vprofile=$profile_h264}${x264tune:+ tune=$x264tune} maxrate=${bitrate_h264} bufsize=$((bitrate_h264*2)) threads=0 movflags=+faststart crf=$crf_h264" +_melt_h264="vcodec=$encoder_h264${preset_h264:+ vpreset=$preset_h264}${profile_h264:+ vprofile=$profile_h264}${x264tune:+ tune=$x264tune}${bitrate_h264:+ maxrate=${bitrate_h264} bufsize=$((bitrate_h264*2))} threads=0 movflags=+faststart crf=$crf_h264" _melt_pcm="$_melt_downmix acodec=pcm_s16le" _melt_vorbis="$_melt_downmix acodec=libvorbis aq=$quality_vorbis" _ffmpeg_vorbis="$_ffmpeg_downmix -c:a libvorbis -aq $quality_vorbis" -- cgit v1.2.3