Skip to content

Commit 874c5ca

Browse files
committed
add the framemd5 output to the tee muxer
1 parent 3b53f45 commit 874c5ca

1 file changed

Lines changed: 50 additions & 26 deletions

File tree

vrecord

Lines changed: 50 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -575,8 +575,28 @@ _setup_vrecord_process(){
575575
fi
576576
RECORD_COMMAND+=("${MIDDLEOPTIONS_PRES[@]}" "${MIDDLEOPTIONS_ALL[@]}")
577577
if [[ "${RUNTYPE}" = "record" ]] ; then
578-
RECORD_COMMAND+=(-filter_complex "[0:v:0]${RECORDINGFILTER#,*}${TC_WRITE}${CAPTION_WRITE}[vout];${AUDIOMAP}" -map "[vout]" "${AUDIO_CHANNEL_MAP[@]}")
579-
RECORD_COMMAND+=(-f tee [f=${FORMAT}:select=v,${AUDIO_TEE_SELECT_MAP}]"${VRECORD_OUTPUT}"\|[f=nut:onfail=abort:select=v,${AUDIO_TEE_SELECT_MAP},a\\\\:0]pipe:1)
578+
if [[ "${FRAMEMD5_CHOICE}" = "true" ]] ; then
579+
FRAMEMD5_IDX=1
580+
FRAMEMD5NAME="${LOGDIR}/${FULL_OUTPUT_ID}.framemd5"
581+
RECORD_COMMAND_TEE+=(\|[f=framehash:hash=MD5:onfail=abort:select=v\\\\:"${FRAMEMD5_IDX}"]"${FRAMEMD5NAME}")
582+
RECORD_COMMAND_SPLIT=",split=2[vout][MD5_VOUT]"
583+
RECORD_COMMAND_MAP+=(-map "[vout]" -map "[MD5_VOUT]")
584+
EXTRAOPTIONS+=(-c:v:"${FRAMEMD5_IDX}" rawvideo)
585+
else
586+
RECORD_COMMAND_SPLIT="[vout]"
587+
RECORD_COMMAND_MAP+=(-map "[vout]")
588+
fi
589+
AUDIO_TEE_SELECT_MAP=""
590+
RECORD_COMMAND+=(-c:a:0 pcm_s24le)
591+
for AUD_IDX in "${AUDIO_CHANNEL_IDX[@]}" ; do
592+
AUDIO_TEE_SELECT_MAP+="${AUDIO_TEE_SELECT_MAP:+,}a\\\\:${AUD_IDX}"
593+
for OPTION in "${AUDIO_MIDDLEOPTIONS_TEMPLATE[@]}" ; do
594+
RECORD_COMMAND+=("${OPTION//:X/:${AUD_IDX}}")
595+
done
596+
done
597+
RECORD_COMMAND+=(-filter_complex "[0:v:0]${RECORDINGFILTER#,*}${TC_WRITE}${CAPTION_WRITE}${RECORD_COMMAND_SPLIT};${AUDIOMAP}" "${RECORD_COMMAND_MAP[@]}" "${AUDIO_CHANNEL_MAP[@]}" "${EXTRAOPTIONS[@]}")
598+
RECORD_COMMAND+=(-f tee [f=${FORMAT}:select=v\\\\:0,${AUDIO_TEE_SELECT_MAP}]"${VRECORD_OUTPUT}"\|[f=nut:onfail=abort:select=v\\\\:0,${AUDIO_TEE_SELECT_MAP},a\\\\:0]pipe:1${RECORD_COMMAND_TEE[@]})
599+
580600
RECORD_COMMAND+=("${EXTRAOUTPUTS[@]}")
581601
else
582602
if [[ "${SIGNAL_INPUT}" = 'true' ]] ; then
@@ -626,7 +646,7 @@ _setup_vrecord_process(){
626646
VRECORD_STEPS="2" # Steps: record | player (record is adjusted if actually recording)
627647
RECORD_COMMAND=("${FFMPEG_BIN}")
628648
RECORD_COMMAND+=(-nostdin -nostats "${TIME_LIMIT[@]}" "${GRAB_INPUT[@]}")
629-
RECORD_COMMAND+=("${MIDDLEOPTIONS_PRES[@]}" "${MIDDLEOPTIONS_ALL[@]}")
649+
RECORD_COMMAND+=("${MIDDLEOPTIONS_PRES_AUDIO[@]}" "${MIDDLEOPTIONS_ALL[@]}")
630650
if [[ "${RUNTYPE}" = "record" ]] ; then
631651
RECORD_COMMAND+=(-f "${FORMAT}" -filter_complex "${AUDIOMAP}" "${AUDIO_CHANNEL_MAP[@]}" "${VRECORD_OUTPUT}")
632652
fi
@@ -1827,57 +1847,62 @@ _lookup_choice(){
18271847
_add_mediaconch_rule_set "${CODEC_UNCOMPRESSED_TEST}"
18281848
if [[ "${PIXEL_FORMAT}" = "yuv422p10" ]] ; then
18291849
VIDEOCODECNAME="Uncompressed 10-bit 4:2:2"
1830-
MIDDLEOPTIONS_PRES+=(-c:v v210)
1850+
MIDDLEOPTIONS_PRES+=(-c:v:0 v210)
18311851
elif [[ "${PIXEL_FORMAT}" = "uyvy422" ]] ; then
18321852
VIDEOCODECNAME="Uncompressed 8-bit 4:2:2"
1833-
MIDDLEOPTIONS_PRES+=(-c:v rawvideo -pix_fmt uyvy422 -tag:v 2vuy)
1853+
MIDDLEOPTIONS_PRES+=(-c:v:0 rawvideo -pix_fmt:v:0 uyvy422 -tag:v:0 2vuy)
18341854
fi ;;
18351855
"FFV1 version 3")
18361856
_add_mediaconch_rule_set "${CODEC_FFV1_TEST}"
18371857
VIDEOCODECNAME="FFV1 version 3"
1838-
MIDDLEOPTIONS_PRES+=(-c:v ffv1 -level 3 -g 1 -slices "${FFV1_SLICES}" -slicecrc 1)
1858+
MIDDLEOPTIONS_PRES+=(-c:v:0 ffv1 -level:v:0 3 -g:v:0 1 -slices:v:0 "${FFV1_SLICES}" -slicecrc:v:0 1)
18391859
SUFFIX="_ffv1" ;;
18401860
"JPEG2000")
18411861
VIDEOCODECNAME="JPEG2000"
1842-
MIDDLEOPTIONS_PRES+=(-c:v libopenjpeg)
1862+
MIDDLEOPTIONS_PRES+=(-c:v:0 libopenjpeg)
18431863
SUFFIX="_j2k" ;;
18441864
"ProRes")
18451865
VIDEOCODECNAME="Apple ProRes 422"
1846-
MIDDLEOPTIONS_PRES+=(-c:v prores_ks -flags +ildct -profile:v 2)
1866+
MIDDLEOPTIONS_PRES+=(-c:v:0 prores_ks -flags:v:0 +ildct -profile:v:0 2)
18471867
SUFFIX="_prores" ;;
18481868
"ProRes (HQ)")
18491869
VIDEOCODECNAME="Apple ProRes 422 HQ"
1850-
MIDDLEOPTIONS_PRES+=(-c:v prores_ks -flags +ildct -profile:v 3)
1870+
MIDDLEOPTIONS_PRES+=(-c:v:0 prores_ks -flags:v:0 +ildct -profile:v:0 3)
18511871
SUFFIX="_prores" ;;
18521872
"h264")
18531873
VIDEOCODECNAME="H.264"
1854-
MIDDLEOPTIONS_PRES+=(-c:v h264 -pix_fmt yuv420p)
1874+
MIDDLEOPTIONS_PRES+=(-c:v:0 h264 -pix_fmt:v:0 yuv420p)
18551875
SUFFIX="_h264" ;;
18561876
"HuffYUV")
18571877
VIDEOCODECNAME="HuffYUV"
18581878
if [[ "${PIXEL_FORMAT}" = "yuv422p10" ]] ; then
1859-
MIDDLEOPTIONS_PRES+=(-c:v ffvhuff -pix_fmt yuv422p10le -pred median -context 1)
1879+
MIDDLEOPTIONS_PRES+=(-c:v:0 ffvhuff -pix_fmt:v:0 yuv422p10le -pred:v:0 median -context:v:0 1)
18601880
elif [[ "${PIXEL_FORMAT}" = "uyvy422" ]] ; then
1861-
MIDDLEOPTIONS_PRES+=(-c:v ffvhuff -pix_fmt yuv422p -pred median -context 1)
1881+
MIDDLEOPTIONS_PRES+=(-c:v:0 ffvhuff -pix_fmt:v:0 yuv422p -pred:v:0 median -context:v:0 1)
18621882
fi
18631883
SUFFIX="_huff" ;;
18641884

18651885
# video pixel format and bit depth
18661886
"10 bit") PIXEL_FORMAT="yuv422p10" ;;
18671887
"8 bit") PIXEL_FORMAT="uyvy422" ;;
18681888

1889+
1890+
18691891
# audio codec
18701892
"24-bit PCM")
1871-
MIDDLEOPTIONS_PRES+=(-c:a pcm_s24le)
1872-
MIDDLEOPTIONS_PRES+=(-rf64 auto)
1893+
MIDDLEOPTIONS_PRES_AUDIO+=(-c:a pcm_s24le)
1894+
MIDDLEOPTIONS_PRES_AUDIO+=(-rf64 auto)
1895+
AUDIO_MIDDLEOPTIONS_TEMPLATE+=(-c:a:X pcm_s24le)
18731896
AUDIO_EXT='wav' ;;
18741897
"24-bit FLAC")
1875-
MIDDLEOPTIONS_PRES+=(-c:a flac)
1876-
MIDDLEOPTIONS_PRES+=(-sample_fmt s32)
1877-
MIDDLEOPTIONS_PRES+=(-bits_per_raw_sample:a 24)
1898+
MIDDLEOPTIONS_PRES_AUDIO+=(-c:a flac)
1899+
MIDDLEOPTIONS_PRES_AUDIO+=(-sample_fmt s32)
1900+
MIDDLEOPTIONS_PRES_AUDIO+=(-bits_per_raw_sample:a 24)
1901+
AUDIO_MIDDLEOPTIONS_TEMPLATE+=(-c:a:X flac -sample_fmt:a:X s32 -bits_per_raw_sample:a:X 24)
18781902
AUDIO_EXT='flac' ;;
18791903
"AAC")
1880-
MIDDLEOPTIONS_PRES+=(-c:a aac) ;;
1904+
MIDDLEOPTIONS_PRES_AUDIO+=(-c:a aac)
1905+
AUDIO_MIDDLEOPTIONS_TEMPLATE+=(-c:a:X aac) ;;
18811906

18821907
# audio mappings
18831908
"2 Stereo Tracks (Channels 1 & 2 -> 1st Track Stereo, Channels 3 & 4 -> 2nd Track Stereo)")
@@ -1888,23 +1913,23 @@ _lookup_choice(){
18881913
AUDIO_CHANNEL_MAP+=(-map "[orig]")
18891914
AUDIO_CHANNEL_MAP+=(-map "[stereo1]")
18901915
AUDIO_CHANNEL_MAP+=(-map "[stereo2]")
1891-
AUDIO_TEE_SELECT_MAP="a\\\\:1,a\\\\:2" ;;
1916+
AUDIO_CHANNEL_IDX=(1 2) ;;
18921917
"1 Stereo Track (From Channels 1 & 2)")
18931918
AUDIOMAP="[0:a:0]asplit[orig],pan=stereo| c0=c0 | c1=${PHASE_VALUE_2}c1[stereo1]"
18941919
AUDIOMAP_MP4="[0:a:0]pan=stereo| c0=c0 | c1=${PHASE_VALUE_2}c1[stereo1]"
18951920
AUDIO_PLAY_MAP="pan=stereo|c0=c0|c1=${PHASE_VALUE_2}c1"
18961921
AUDIO_PLAY_LABELS=",drawtext=fontfile=${DEFAULTFONT}:text='L(1)':fontcolor=white:fontsize=18:x=0:y=0,drawtext=fontfile=${DEFAULTFONT}:text='R(1)':fontcolor=white:fontsize=18:x=0:y=20"
18971922
AUDIO_CHANNEL_MAP+=(-map "[orig]")
18981923
AUDIO_CHANNEL_MAP+=(-map "[stereo1]")
1899-
AUDIO_TEE_SELECT_MAP="a\\\\:1" ;;
1924+
AUDIO_CHANNEL_IDX=(1) ;;
19001925
"1 Stereo Track (From Channels 3 & 4)")
19011926
AUDIOMAP="[0:a:0]asplit[orig],pan=stereo| c0=c2 | c1=${PHASE_VALUE_2}c3[stereo1]"
19021927
AUDIOMAP_MP4="[0:a:0]pan=stereo| c0=c2 | c1=${PHASE_VALUE_2}c3[stereo1]"
19031928
AUDIO_PLAY_MAP="pan=stereo|c0=c2|c1=${PHASE_VALUE_2}c3"
19041929
AUDIO_PLAY_LABELS=",drawtext=fontfile=${DEFAULTFONT}:text='L(1)':fontcolor=white:fontsize=18:x=0:y=40,drawtext=fontfile=${DEFAULTFONT}:text='R(1)':fontcolor=white:fontsize=18:x=0:y=60"
19051930
AUDIO_CHANNEL_MAP+=(-map "[orig]")
19061931
AUDIO_CHANNEL_MAP+=(-map "[stereo1]")
1907-
AUDIO_TEE_SELECT_MAP="a\\\\:1" ;;
1932+
AUDIO_CHANNEL_IDX=(1) ;;
19081933
"Channel 1 -> 1st Track Mono, Channel 2 -> 2nd Track Mono")
19091934
AUDIOMAP="[0:a:0]asplit[orig],pan=mono| c0=c0[mono1];[0:a:0]pan=mono| c0=${PHASE_VALUE_2}c1[mono2]"
19101935
AUDIOMAP_MP4="[0:a:0]pan=mono| c0=c0[mono1];[0:a:0]pan=mono| c0=${PHASE_VALUE_2}c1[mono2]"
@@ -1913,7 +1938,7 @@ _lookup_choice(){
19131938
AUDIO_CHANNEL_MAP+=(-map "[orig]")
19141939
AUDIO_CHANNEL_MAP+=(-map "[mono1]")
19151940
AUDIO_CHANNEL_MAP+=(-map "[mono2]")
1916-
AUDIO_TEE_SELECT_MAP="a\\\\:1,a\\\\:2" ;;
1941+
AUDIO_CHANNEL_IDX=(1 2) ;;
19171942
"Channel 2 -> 1st Track Mono, Channel 1 -> 2nd Track Mono")
19181943
AUDIOMAP="[0:a:0]asplit[orig],pan=mono| c0=${PHASE_VALUE_2}c1[mono1];[0:a:0]pan=mono| c0=c0[mono2]"
19191944
AUDIOMAP_MP4="[0:a:0]pan=mono| c0=${PHASE_VALUE_2}c1[mono1];[0:a:0]pan=mono| c0=c0[mono2]"
@@ -1922,23 +1947,23 @@ _lookup_choice(){
19221947
AUDIO_CHANNEL_MAP+=(-map "[orig]")
19231948
AUDIO_CHANNEL_MAP+=(-map "[mono1]")
19241949
AUDIO_CHANNEL_MAP+=(-map "[mono2]")
1925-
AUDIO_TEE_SELECT_MAP="a\\\\:1,a\\\\:2" ;;
1950+
AUDIO_CHANNEL_IDX=(1 2) ;;
19261951
"Channel 1 -> Single Track Mono")
19271952
AUDIOMAP="[0:a:0]asplit[orig],pan=mono| c0=c0[mono1]"
19281953
AUDIOMAP_MP4="[0:a:0]pan=mono| c0=c0[mono1]"
19291954
AUDIO_PLAY_MAP="pan=mono| c0=c0"
19301955
AUDIO_PLAY_LABELS=",drawtext=fontfile=${DEFAULTFONT}:text='M(1)':fontcolor=white:fontsize=18:x=0:y=0"
19311956
AUDIO_CHANNEL_MAP+=(-map "[orig]")
19321957
AUDIO_CHANNEL_MAP+=(-map "[mono1]")
1933-
AUDIO_TEE_SELECT_MAP="a\\\\:1" ;;
1958+
AUDIO_CHANNEL_IDX=(1) ;;
19341959
"Channel 2 -> Single Track Mono")
19351960
AUDIOMAP="[0:a:0]asplit[orig],pan=mono| c0=c1[mono1]"
19361961
AUDIOMAP_MP4="[0:a:0]pan=mono| c0=c1[mono1]"
19371962
AUDIO_PLAY_MAP="pan=mono| c0=c1"
19381963
AUDIO_PLAY_LABELS=",drawtext=fontfile=${DEFAULTFONT}:text='M(1)':fontcolor=white:fontsize=18:x=0:y=20"
19391964
AUDIO_CHANNEL_MAP+=(-map "[orig]")
19401965
AUDIO_CHANNEL_MAP+=(-map "[mono1]")
1941-
AUDIO_TEE_SELECT_MAP="a\\\\:1" ;;
1966+
AUDIO_CHANNEL_IDX=(1) ;;
19421967
# Audio mode channel options
19431968
"Mono")
19441969
AUDIOMAP="[0:a:0]pan=mono| c0=c0[mono1]"
@@ -3030,7 +3055,6 @@ if [[ "${DEVICE_INPUT_CHOICE}" = "0" ]] ; then
30303055
fi
30313056
if [[ "${FRAMEMD5_CHOICE}" = "true" ]] ; then
30323057
FRAMEMD5NAME="${LOGDIR}/${FULL_OUTPUT_ID}.framemd5"
3033-
EXTRAOUTPUTS+=(-an -f framemd5 "${FRAMEMD5NAME}")
30343058
fi
30353059
if [[ "${SIGNAL_INPUT}" = 'true' ]] ; then
30363060
AUDIOMAP=$(sed "s/0:a:0/1:a:0/g" <<< "$AUDIOMAP")

0 commit comments

Comments
 (0)