summaryrefslogtreecommitdiff
path: root/localvideowebencode
diff options
context:
space:
mode:
Diffstat (limited to 'localvideowebencode')
-rwxr-xr-xlocalvideowebencode88
1 files changed, 58 insertions, 30 deletions
diff --git a/localvideowebencode b/localvideowebencode
index 5060645..58a099a 100755
--- a/localvideowebencode
+++ b/localvideowebencode
@@ -611,15 +611,43 @@ _ffmpeg_gpu_qsv_filter="-vf 'hwupload=extra_hw_frames=64,format=qsv'"
_ffmpeg_gpu_filter="${gpu_vaapi:+ ${_ffmpeg_gpu_vaapi_filter}}${gpu_qsv:+ ${_ffmpeg_gpu_qsv_filter}}"
# generic options
-melt="melt -progress$_melt_gpu_init"
which ffmpeg > /dev/null && ffmpeg=ffmpeg || ffmpeg=avconv
-ffmpeg_alone="$ffmpeg -threads auto -y -hide_banner -v info -stats$_ffmpeg_gpu_init"
-ffmpeg_chained="$ffmpeg -threads auto -y -v warning$_ffmpeg_gpu_init"
-vpxenc_chained="vpxenc --quiet ${processors:+-t $((processors-1))}"
-oggenc="oggenc"
-opusenc="opusenc"
_melt_infiles="${notsample:+$infiles}${sample:+$infile_first in=$((samplestart)) out=$((samplestart + samplelength))}"
+render() {
+ engine=$1; shift
+ chained=
+ echo=
+ unchained=yes
+ case "$engine" in
+ ffmpeg-chained) engine=ffmpeg; chained=yes;;
+ vpxenc-chained) engine=vpxenc; chained=yes;;
+ ffmpeg-chained-echo) engine=ffmpeg; chained=yes; echo=yes;;
+ vpxenc-chained-echo) engine=vpxenc; chained=yes; echo=yes;;
+ esac
+ [ -z "$chained" ] || unchained=
+ case "$engine" in
+ melt)
+ set -- -progress$_melt_gpu_init "$@"
+ ;;
+ ffmpeg)
+ engine=$ffmpeg
+ set -- -threads auto -y -hide_banner -v ${unchained:+info -stats}${chained:+warning}$_ffmpeg_gpu_init "$@"
+ ;;
+ vpxenc)
+ set -- --quiet ${processors:+-t $((processors-1))} "$@"
+ ;;
+ oggenc)
+ set -- "$@"
+ ;;
+ opusenc)
+ set -- "$@"
+ ;;
+ *) exit1 "Unknown render engine \"$engine\".";;
+ esac
+ ${echo:+echo }"$engine" "$@"
+}
+
# filter options
_melt_video="progressive=1${framerate:+ frame_rate_num="$framerate_num" frame_rate_den="$framerate_den"}${size:+ s=${width:+$width}x${height:+$height}}${aspect:+ aspect=$aspect}"
_ffmpeg_video="${no_gpu:+${do_deinterlace:+-filter:v yadif}${framerate:+ -r $framerate_num/$framerate_den}${size:+ -s ${width:+$width}x${height:+$height}}${aspect:+ -aspect $aspect}}"
@@ -707,7 +735,7 @@ _melt_img="f=image2 $_melt_video"
_melt_loudness="$loudness_data"
if [ -n "$loudness" ] && [ -z "$silence$_melt_loudness" ]; then
echo >&2 "Analyzing audio dynamics..."
- $melt $_melt_infiles \
+ render melt $_melt_infiles \
$audioprefilters -filter loudness $filters \
-consumer xml:$stem.xml video_off=1 all=1
_melt_loudness="$(perl -n \
@@ -718,7 +746,7 @@ fi
if [ -n "${webm:+$multipass_vp8}${webm_vp9:+$multipass_vp9}${mp4:+$multipass_avc}" ]; then
echo >&2 "Analyzing video complexity..."
- $melt $_melt_infiles $filters $_melt_stdout \
+ render melt $_melt_infiles $filters $_melt_stdout \
${webm:+${use_melt_vp8:+-consumer avformat:$stem.webm $_melt_webm \
pass=1 passlogfile=${stem}_vp8}} \
${webm_vp9:+${use_melt_vp9:+-consumer avformat:${stem}_vp9.webm $_melt_webm_vp9 \
@@ -726,21 +754,21 @@ if [ -n "${webm:+$multipass_vp8}${webm_vp9:+$multipass_vp9}${mp4:+$multipass_avc
${mp4:+${use_melt_avc:+-consumer avformat:$stem.mp4 $_melt_mp4 \
pass=1 passlogfile=${stem}_vp8}} \
| pee \
- ${any_ffmpeg:+"$ffmpeg_chained $_ffmpeg_stdin \
+ ${any_ffmpeg:+"$(render ffmpeg-chained-echo $_ffmpeg_stdin \
${webm:+${use_ffmpeg_vp8:+$_ffmpeg_rawvideo $_ffmpeg_vp8 -an \
-pass 1 -passlogfile ${stem}_vp8 /dev/null}} \
${webm_vp9:+${use_ffmpeg_vp9:+$_ffmpeg_rawvideo $_ffmpeg_vp9 -an \
-pass 1 -passlogfile ${stem}_vp9 /dev/null}} \
${mp4:+${use_ffmpeg_avc:+$_ffmpeg_rawvideo $_ffmpeg_avc -an \
- -pass 1 -passlogfile ${stem}_avc /dev/null}}"} \
- ${webm:+${use_vpxenc:+"$vpxenc_chained - $_vpxenc_vp8 \
- --pass=1 --fpf=${stem}_vp8.log -o /dev/null"}} \
- ${webm_vp9:+${use_vpxenc:+"$vpxenc_chained - $_vpxenc_vp9 \
- --pass=1 --fpf=${stem}_vp9.log -o /dev/null"}}
+ -pass 1 -passlogfile ${stem}_avc /dev/null}})"} \
+ ${webm:+${use_vpxenc:+"$(render vpxenc-chained-echo - $_vpxenc_vp8 \
+ --pass=1 --fpf=${stem}_vp8.log -o /dev/null)"}} \
+ ${webm_vp9:+${use_vpxenc:+"$(render vpxenc-chained-echo - $_vpxenc_vp9 \
+ --pass=1 --fpf=${stem}_vp9.log -o /dev/null)"}}
fi
echo >&2 "Encoding video${channels:+ and audio}..."
- $melt $_melt_infiles \
+ render melt $_melt_infiles \
${channels:+$audioprefilters \
${_melt_loudness:+-filter loudness program=$lufs \
results="$_melt_loudness"}} \
@@ -758,7 +786,7 @@ fi
$_melt_matroska_pcm}} \
$_melt_stdout \
| pee \
- ${any_ffmpeg:+"$ffmpeg_chained $_ffmpeg_stdin \
+ ${any_ffmpeg:+"$(render ffmpeg-chained-echo $_ffmpeg_stdin \
${webm:+${use_ffmpeg_vp8:+$_ffmpeg_webm_onlyvideo \
${multipass_vp8:+-pass 2 -passlogfile ${stem}_vp8} \
${stem}${channels:+_silent}.webm}} \
@@ -767,23 +795,23 @@ fi
${stem}_vp9${channels:+_silent}.webm}} \
${mp4:+${use_ffmpeg_avc:+$_ffmpeg_mp4_onlyvideo \
${multipass_avc:+-pass 2 -passlogfile ${stem}_avc} \
- ${stem}${channels:+_silent}.mp4}}"} \
- ${webm:+${use_vpxenc:+"$vpxenc_chained - $_vpxenc_vp8 \
+ ${stem}${channels:+_silent}.mp4}})"} \
+ ${webm:+${use_vpxenc:+"$(render vpxenc-chained-echo - $_vpxenc_vp8 \
${multipass_vp8:+--pass=2 --fpf=${stem}_vp8.log} \
- -o ${stem}${channels:+_silent}.webm"}} \
- ${webm_vp9:+${use_vpxenc:+"$vpxenc_chained - $_vpxenc_vp9 \
+ -o ${stem}${channels:+_silent}.webm)"}} \
+ ${webm_vp9:+${use_vpxenc:+"$(render vpxenc-chained-echo - $_vpxenc_vp9 \
${multipass_vp9:+--pass=2 --fpf=${stem}_vp9.log} \
- -o ${stem}_vp9${channels:+_silent}.webm"}}
+ -o ${stem}_vp9${channels:+_silent}.webm)"}}
if [ -n "${webm:+$use_vpxenc$use_oggenc}" ] && [ -n "$channels" ]; then
echo >&2 "Encoding Vorbis audio and muxing with VP8 video..."
if [ -n "$use_oggenc" ]; then
- $oggenc $_oggenc_wav_in $_oggenc_vorbis -o - $stem.wav \
- | $ffmpeg_chained \
+ render oggenc $_oggenc_wav_in $_oggenc_vorbis -o - $stem.wav \
+ | render ffmpeg-chained \
$_ffmpeg_webm_in -i ${stem}_silent.webm \
$_ffmpeg_ogg_in -i pipe:0 \
$_ffmpeg_webm_keepvideo $stem.webm
else
- $ffmpeg_alone $_ffmpeg_webm_in -i ${stem}_silent.webm \
+ render ffmpeg $_ffmpeg_webm_in -i ${stem}_silent.webm \
$_ffmpeg_matroska_wav_in -i $stem.mkv \
$_ffmpeg_webm_keepvideo ${stem}.webm
fi
@@ -791,13 +819,13 @@ fi
if [ -n "${webm_vp9:+$use_vpxenc$use_opusenc}" ] && [ -n "$channels" ]; then
echo >&2 "Encoding Opus audio and muxing with VP9 video..."
if [ -n "$use_opusenc" ]; then
- $opusenc $_opusenc_wav_in $_opusenc_opus -o - $stem.wav \
- | $ffmpeg_chained \
+ render opusenc $_opusenc_wav_in $_opusenc_opus -o - $stem.wav \
+ | render ffmpeg-chained \
$_ffmpeg_webm_in -i ${stem}_vp9_silent.webm \
$_ffmpeg_ogg_in -i pipe:0 \
$_ffmpeg_webm_keepvideo_opus ${stem}_vp9.webm
else
- $ffmpeg_alone $_ffmpeg_webm_in -i ${stem}_vp9_silent.webm \
+ render ffmpeg $_ffmpeg_webm_in -i ${stem}_vp9_silent.webm \
$_ffmpeg_matroska_wav_in -i $stem.mkv \
$_ffmpeg_webm_keepvideo_opus ${stem}_vp9.webm
fi
@@ -805,12 +833,12 @@ fi
if [ -n "${mp4:+$use_ffmpeg_avc}" ] && [ -n "$channels" ]; then
if [ -n "$use_mp3" ]; then
echo "Encoding MP3 audio and muxing with H.264/AVC video..."
- $ffmpeg_alone $_ffmpeg_mp4_in -i ${stem}_silent.mp4 \
+ render ffmpeg $_ffmpeg_mp4_in -i ${stem}_silent.mp4 \
$_ffmpeg_matroska_wav_in -i $stem.mkv \
$_ffmpeg_mp4_keepvideo ${stem}.mp4
else
echo "Encoding AAC audio and muxing with H.264/AVC video..."
- $ffmpeg_alone $_ffmpeg_mp4_in -i ${stem}_silent.mp4 \
+ render ffmpeg $_ffmpeg_mp4_in -i ${stem}_silent.mp4 \
$_ffmpeg_matroska_wav_in -i $stem.mkv \
$_ffmpeg_mp4_keepvideo_aac ${stem}.mp4
fi
@@ -820,7 +848,7 @@ fi
rm -f $stem.xml $stem.wav $stem.mkv ${stem}_*.log ${stem}_*silent.webm
# JPEG preview
-$melt $infile_first in=$stillframe out=$stillframe \
+render melt $infile_first in=$stillframe out=$stillframe \
-group $filters \
-consumer avformat:$stem.jpg $_melt_img