@@ -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
@@ -1829,57 +1849,62 @@ _lookup_choice(){
18291849 _add_mediaconch_rule_set " ${CODEC_UNCOMPRESSED_TEST} "
18301850 if [[ " ${PIXEL_FORMAT} " = " yuv422p10" ]] ; then
18311851 VIDEOCODECNAME=" Uncompressed 10-bit 4:2:2"
1832- MIDDLEOPTIONS_PRES+=(-c:v v210)
1852+ MIDDLEOPTIONS_PRES+=(-c:v:0 v210)
18331853 elif [[ " ${PIXEL_FORMAT} " = " uyvy422" ]] ; then
18341854 VIDEOCODECNAME=" Uncompressed 8-bit 4:2:2"
1835- MIDDLEOPTIONS_PRES+=(-c:v rawvideo -pix_fmt uyvy422 -tag:v 2vuy)
1855+ MIDDLEOPTIONS_PRES+=(-c:v:0 rawvideo -pix_fmt:v:0 uyvy422 -tag:v:0 2vuy)
18361856 fi ;;
18371857 " FFV1 version 3" )
18381858 _add_mediaconch_rule_set " ${CODEC_FFV1_TEST} "
18391859 VIDEOCODECNAME=" FFV1 version 3"
1840- MIDDLEOPTIONS_PRES+=(-c:v ffv1 -level 3 -g 1 -slices " ${FFV1_SLICES} " -slicecrc 1)
1860+ MIDDLEOPTIONS_PRES+=(-c:v:0 ffv1 -level:v:0 3 -g:v:0 1 -slices:v:0 " ${FFV1_SLICES} " -slicecrc:v:0 1)
18411861 SUFFIX=" _ffv1" ;;
18421862 " JPEG2000" )
18431863 VIDEOCODECNAME=" JPEG2000"
1844- MIDDLEOPTIONS_PRES+=(-c:v libopenjpeg)
1864+ MIDDLEOPTIONS_PRES+=(-c:v:0 libopenjpeg)
18451865 SUFFIX=" _j2k" ;;
18461866 " ProRes" )
18471867 VIDEOCODECNAME=" Apple ProRes 422"
1848- MIDDLEOPTIONS_PRES+=(-c:v prores_ks -flags +ildct -profile:v 2)
1868+ MIDDLEOPTIONS_PRES+=(-c:v:0 prores_ks -flags:v:0 +ildct -profile:v:0 2)
18491869 SUFFIX=" _prores" ;;
18501870 " ProRes (HQ)" )
18511871 VIDEOCODECNAME=" Apple ProRes 422 HQ"
1852- MIDDLEOPTIONS_PRES+=(-c:v prores_ks -flags +ildct -profile:v 3)
1872+ MIDDLEOPTIONS_PRES+=(-c:v:0 prores_ks -flags:v:0 +ildct -profile:v:0 3)
18531873 SUFFIX=" _prores" ;;
18541874 " h264" )
18551875 VIDEOCODECNAME=" H.264"
1856- MIDDLEOPTIONS_PRES+=(-c:v h264 -pix_fmt yuv420p)
1876+ MIDDLEOPTIONS_PRES+=(-c:v:0 h264 -pix_fmt:v:0 yuv420p)
18571877 SUFFIX=" _h264" ;;
18581878 " HuffYUV" )
18591879 VIDEOCODECNAME=" HuffYUV"
18601880 if [[ " ${PIXEL_FORMAT} " = " yuv422p10" ]] ; then
1861- MIDDLEOPTIONS_PRES+=(-c:v ffvhuff -pix_fmt yuv422p10le -pred median -context 1)
1881+ MIDDLEOPTIONS_PRES+=(-c:v:0 ffvhuff -pix_fmt:v:0 yuv422p10le -pred:v:0 median -context:v:0 1)
18621882 elif [[ " ${PIXEL_FORMAT} " = " uyvy422" ]] ; then
1863- MIDDLEOPTIONS_PRES+=(-c:v ffvhuff -pix_fmt yuv422p -pred median -context 1)
1883+ MIDDLEOPTIONS_PRES+=(-c:v:0 ffvhuff -pix_fmt:v:0 yuv422p -pred:v:0 median -context:v:0 1)
18641884 fi
18651885 SUFFIX=" _huff" ;;
18661886
18671887 # video pixel format and bit depth
18681888 " 10 bit" ) PIXEL_FORMAT=" yuv422p10" ;;
18691889 " 8 bit" ) PIXEL_FORMAT=" uyvy422" ;;
18701890
1891+
1892+
18711893 # audio codec
18721894 " 24-bit PCM" )
1873- MIDDLEOPTIONS_PRES+=(-c:a pcm_s24le)
1874- MIDDLEOPTIONS_PRES+=(-rf64 auto)
1895+ MIDDLEOPTIONS_PRES_AUDIO+=(-c:a pcm_s24le)
1896+ MIDDLEOPTIONS_PRES_AUDIO+=(-rf64 auto)
1897+ AUDIO_MIDDLEOPTIONS_TEMPLATE+=(-c:a:X pcm_s24le)
18751898 AUDIO_EXT=' wav' ;;
18761899 " 24-bit FLAC" )
1877- MIDDLEOPTIONS_PRES+=(-c:a flac)
1878- MIDDLEOPTIONS_PRES+=(-sample_fmt s32)
1879- MIDDLEOPTIONS_PRES+=(-bits_per_raw_sample:a 24)
1900+ MIDDLEOPTIONS_PRES_AUDIO+=(-c:a flac)
1901+ MIDDLEOPTIONS_PRES_AUDIO+=(-sample_fmt s32)
1902+ MIDDLEOPTIONS_PRES_AUDIO+=(-bits_per_raw_sample:a 24)
1903+ AUDIO_MIDDLEOPTIONS_TEMPLATE+=(-c:a:X flac -sample_fmt:a:X s32 -bits_per_raw_sample:a:X 24)
18801904 AUDIO_EXT=' flac' ;;
18811905 " AAC" )
1882- MIDDLEOPTIONS_PRES+=(-c:a aac) ;;
1906+ MIDDLEOPTIONS_PRES_AUDIO+=(-c:a aac)
1907+ AUDIO_MIDDLEOPTIONS_TEMPLATE+=(-c:a:X aac) ;;
18831908
18841909 # audio mappings
18851910 " 2 Stereo Tracks (Channels 1 & 2 -> 1st Track Stereo, Channels 3 & 4 -> 2nd Track Stereo)" )
@@ -1890,23 +1915,23 @@ _lookup_choice(){
18901915 AUDIO_CHANNEL_MAP+=(-map " [orig]" )
18911916 AUDIO_CHANNEL_MAP+=(-map " [stereo1]" )
18921917 AUDIO_CHANNEL_MAP+=(-map " [stereo2]" )
1893- AUDIO_TEE_SELECT_MAP= " a \\\\ :1,a \\\\ :2 " ;;
1918+ AUDIO_CHANNEL_IDX=(1 2) ;;
18941919 " 1 Stereo Track (From Channels 1 & 2)" )
18951920 AUDIOMAP=" [0:a:0]asplit[orig],pan=stereo| c0=c0 | c1=${PHASE_VALUE_2} c1[stereo1]"
18961921 AUDIOMAP_MP4=" [0:a:0]pan=stereo| c0=c0 | c1=${PHASE_VALUE_2} c1[stereo1]"
18971922 AUDIO_PLAY_MAP=" pan=stereo|c0=c0|c1=${PHASE_VALUE_2} c1"
18981923 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"
18991924 AUDIO_CHANNEL_MAP+=(-map " [orig]" )
19001925 AUDIO_CHANNEL_MAP+=(-map " [stereo1]" )
1901- AUDIO_TEE_SELECT_MAP= " a \\\\ :1 " ;;
1926+ AUDIO_CHANNEL_IDX=(1) ;;
19021927 " 1 Stereo Track (From Channels 3 & 4)" )
19031928 AUDIOMAP=" [0:a:0]asplit[orig],pan=stereo| c0=c2 | c1=${PHASE_VALUE_2} c3[stereo1]"
19041929 AUDIOMAP_MP4=" [0:a:0]pan=stereo| c0=c2 | c1=${PHASE_VALUE_2} c3[stereo1]"
19051930 AUDIO_PLAY_MAP=" pan=stereo|c0=c2|c1=${PHASE_VALUE_2} c3"
19061931 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"
19071932 AUDIO_CHANNEL_MAP+=(-map " [orig]" )
19081933 AUDIO_CHANNEL_MAP+=(-map " [stereo1]" )
1909- AUDIO_TEE_SELECT_MAP= " a \\\\ :1 " ;;
1934+ AUDIO_CHANNEL_IDX=(1) ;;
19101935 " Channel 1 -> 1st Track Mono, Channel 2 -> 2nd Track Mono" )
19111936 AUDIOMAP=" [0:a:0]asplit[orig],pan=mono| c0=c0[mono1];[0:a:0]pan=mono| c0=${PHASE_VALUE_2} c1[mono2]"
19121937 AUDIOMAP_MP4=" [0:a:0]pan=mono| c0=c0[mono1];[0:a:0]pan=mono| c0=${PHASE_VALUE_2} c1[mono2]"
@@ -1915,7 +1940,7 @@ _lookup_choice(){
19151940 AUDIO_CHANNEL_MAP+=(-map " [orig]" )
19161941 AUDIO_CHANNEL_MAP+=(-map " [mono1]" )
19171942 AUDIO_CHANNEL_MAP+=(-map " [mono2]" )
1918- AUDIO_TEE_SELECT_MAP= " a \\\\ :1,a \\\\ :2 " ;;
1943+ AUDIO_CHANNEL_IDX=(1 2) ;;
19191944 " Channel 2 -> 1st Track Mono, Channel 1 -> 2nd Track Mono" )
19201945 AUDIOMAP=" [0:a:0]asplit[orig],pan=mono| c0=${PHASE_VALUE_2} c1[mono1];[0:a:0]pan=mono| c0=c0[mono2]"
19211946 AUDIOMAP_MP4=" [0:a:0]pan=mono| c0=${PHASE_VALUE_2} c1[mono1];[0:a:0]pan=mono| c0=c0[mono2]"
@@ -1924,23 +1949,23 @@ _lookup_choice(){
19241949 AUDIO_CHANNEL_MAP+=(-map " [orig]" )
19251950 AUDIO_CHANNEL_MAP+=(-map " [mono1]" )
19261951 AUDIO_CHANNEL_MAP+=(-map " [mono2]" )
1927- AUDIO_TEE_SELECT_MAP= " a \\\\ :1,a \\\\ :2 " ;;
1952+ AUDIO_CHANNEL_IDX=(1 2) ;;
19281953 " Channel 1 -> Single Track Mono" )
19291954 AUDIOMAP=" [0:a:0]asplit[orig],pan=mono| c0=c0[mono1]"
19301955 AUDIOMAP_MP4=" [0:a:0]pan=mono| c0=c0[mono1]"
19311956 AUDIO_PLAY_MAP=" pan=mono| c0=c0"
19321957 AUDIO_PLAY_LABELS=" ,drawtext=fontfile=${DEFAULTFONT} :text='M(1)':fontcolor=white:fontsize=18:x=0:y=0"
19331958 AUDIO_CHANNEL_MAP+=(-map " [orig]" )
19341959 AUDIO_CHANNEL_MAP+=(-map " [mono1]" )
1935- AUDIO_TEE_SELECT_MAP= " a \\\\ :1 " ;;
1960+ AUDIO_CHANNEL_IDX=(1) ;;
19361961 " Channel 2 -> Single Track Mono" )
19371962 AUDIOMAP=" [0:a:0]asplit[orig],pan=mono| c0=c1[mono1]"
19381963 AUDIOMAP_MP4=" [0:a:0]pan=mono| c0=c1[mono1]"
19391964 AUDIO_PLAY_MAP=" pan=mono| c0=c1"
19401965 AUDIO_PLAY_LABELS=" ,drawtext=fontfile=${DEFAULTFONT} :text='M(1)':fontcolor=white:fontsize=18:x=0:y=20"
19411966 AUDIO_CHANNEL_MAP+=(-map " [orig]" )
19421967 AUDIO_CHANNEL_MAP+=(-map " [mono1]" )
1943- AUDIO_TEE_SELECT_MAP= " a \\\\ :1 " ;;
1968+ AUDIO_CHANNEL_IDX=(1) ;;
19441969 # Audio mode channel options
19451970 " Mono" )
19461971 AUDIOMAP=" [0:a:0]pan=mono| c0=c0[mono1]"
@@ -3106,7 +3131,6 @@ if [[ "${DEVICE_INPUT_CHOICE}" = "0" ]] ; then
31063131 fi
31073132 if [[ " ${FRAMEMD5_CHOICE} " = " true" ]] ; then
31083133 FRAMEMD5NAME=" ${LOGDIR} /${FULL_OUTPUT_ID} .framemd5"
3109- EXTRAOUTPUTS+=(-an -f framemd5 " ${FRAMEMD5NAME} " )
31103134 fi
31113135 if [[ " ${SIGNAL_INPUT} " = ' true' ]] ; then
31123136 AUDIOMAP=$( sed " s/0:a:0/1:a:0/g" <<< " $AUDIOMAP" )
0 commit comments