@@ -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