# !/bin/sh
# nvidia hevc to hevc with three output mpegts with hysmux flags:
# logo and draw text
# author: hybase@qq.com
# hysmux flag: user defined flag(not ffmpeg official)
ulimit -c 9999999
date1="`date +"%Y-%m-%d %H:%M:%S"`"
echo "================== start ==================== "
INPUT_PARAMS="-loglevel info -y -fflags +genpts -c:v hevc_cuvid -gpu 0 -i /r2/vppftp/4k/4k_p50_hdr.ts"
HEVC_NVENC_PARAMS="-c:v:0 hevc_nvenc -gpu any -aud 1 -preset slow -2pass 1 -profile:v 1 -level:v 0 -tier 1 -rc cbr_hq -cbr 1 -rc-lookahead 0 -no-scenecut 1 -strict_gop 1 "
AAC_ENC_PARAMS="-c:a:0 libfdk_aac -ab:a:0 128k -ar:a:0 48000 -ac:a:0 2 -vol:a:0 256"
AC3_ENC_PARAMS="-c:a:1 ac3 -ab:a:1 192k -ar:a:1 48000 -ac:a:1 2 -vol:a:1 256"
# mpegts params
MPEGTS_PARAMS1="-muxdelay 1.5 -pcr_period 33 -pat_period 0.08 -sdt_period 1.2 -pes_payload_size 100 -mpegts_flags +hysmux -f mpegts"
MPEGTS_PARAMS2="-muxdelay 0.8 -pcr_period 33 -pat_period 0.08 -sdt_period 1.2 -pes_payload_size 100 -mpegts_flags +hysmux -f mpegts"
# filter complex params: Linux 49.65 暂未支持font
TEXT1_STR=\
",drawtext=fontfile=/r2/hys_project/proj-stranscoder/bin/fonts/mingliu.ttc:text='流媒体公司'"\
":x=400:y=400:fontsize=64:fontcolor=0xfffe00@0.7:shadowy=2"
TEXT2_STR=\
",drawtext=fontfile=/r2/hys_project/proj-stranscoder/bin/fonts/mingliu.ttc:text='版权所有,违者必究'"\
":x=400:y=500:fontsize=64:fontcolor=0xfffe00@0.7:shadowy=2"
FILTER_COMPLEX_PARAMS2=\
"[0:v]split=3[in1][in2][in3];"\
"[in1][1:v]overlay=100:100[bkg1];[bkg1][2:v]overlay=100:300"$TEXT1_STR""$TEXT2_STR"[out1];"\
"[in2][1:v]overlay=100:100[bkg1];[bkg1][2:v]overlay=100:300"$TEXT1_STR""$TEXT2_STR"[out2];"\
"[in3][1:v]overlay=100:100[bkg1];[bkg1][2:v]overlay=100:300"$TEXT1_STR""$TEXT2_STR"[out3]"
ffmpeg $INPUT_PARAMS \
-i /r2/vppftp/image/logo/jxtv_180x180.png \
-ignore_loop 1 -i /r2/vppftp/image/logo/xktv_180x180.gif \
-filter_complex $FILTER_COMPLEX_PARAMS2 \
-map "[out1]" $HEVC_NVENC_PARAMS -b:v:0 9000000 -minrate 9000000 -maxrate 9000000 -bufsize 3000000 -g 25 -bf 0 -pix_fmt yuv420p -r 25.0\
-map 0:1 $AAC_ENC_PARAMS \
-map 0:1 $AC3_ENC_PARAMS \
-muxrate 12500000 \
$MPEGTS_PARAMS1 output_watermark_nv_s2160p_bpp8_p25.ts\
-map "[out2]" $HEVC_NVENC_PARAMS -b:v:0 3000000 -minrate 3000000 -maxrate 3000000 -bufsize 3000000 -g 25 -bf 0 -pix_fmt yuv420p -r 25.0 -s 1280x720\
-map 0:1 $AAC_ENC_PARAMS -c:a:0 libfdk_aac -ab:a:0 64000 -ar:a:0 48000 -ac:a:0 2 -vol:a:0 256\
-muxrate 3750000 \
$MPEGTS_PARAMS2 output_watermark_nv_s720p_bpp8_p25.ts\
-map "[out3]" $HEVC_NVENC_PARAMS -b:v:0 1000000 -minrate 1000000 -maxrate 1000000 -bufsize 1000000 -g 25 -bf 0 -pix_fmt yuv420p -r 25.0 -s 640x360\
-map 0:1 $AAC_ENC_PARAMS -c:a:0 libfdk_aac -ab:a:0 64000 -ar:a:0 48000 -ac:a:0 2 -vol:a:0 256\
-muxrate 1200000 \
$MPEGTS_PARAMS2 output_watermark_nv_s360p_bpp8_p25.ts
date2="`date +"%Y-%m-%d %H:%M:%S"`"
time_distance=$(expr $(date +%s -d "$date2") - $(date +%s -d "$date1")) ;
hour_distance=$(expr ${time_distance} / 3600);
hour_remainder=$(expr ${time_distance} % 3600);
min_distance=$(expr ${hour_remainder} / 60);
min_remainder=$(expr ${hour_remainder} % 60);
process_fps=$(expr 432 / ${time_distance});
echo "======================= time info ================== "
echo "= start --- $date1"
echo "= end --- $date2"
echo "="
echo "= total --- ${hour_distance}:${min_distance}:${min_remainder} ${process_fps} fps"
echo "="
echo "======================= time info ================== "
echo "======================= end ========================= "
echo ""