101 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
set -e
 | 
						|
 | 
						|
_vidfile="/home/sdk/rec-screen.mkv"
 | 
						|
_outfile="/home/sdk/rec-encoded-$(date "+%Y%m%d_%H%M%S").mp4"
 | 
						|
 | 
						|
while getopts 'ame' arg
 | 
						|
do
 | 
						|
    case ${arg} in
 | 
						|
        a) MIC=1; ;;
 | 
						|
        m) MON=1; ;;
 | 
						|
        e) EONLY=1; ;;
 | 
						|
    esac
 | 
						|
done
 | 
						|
 | 
						|
_head_param="\
 | 
						|
    -y \
 | 
						|
    -loglevel error \
 | 
						|
    -hide_banner"
 | 
						|
 | 
						|
_mon_in="\
 | 
						|
        -thread_queue_size 16 \
 | 
						|
        -use_wallclock_as_timestamps 1 \
 | 
						|
        -f sndio \
 | 
						|
        -i snd/mon"
 | 
						|
 | 
						|
_mon_proc="\
 | 
						|
        -c:a pcm_s16le"
 | 
						|
 | 
						|
_mic_in="\
 | 
						|
        -thread_queue_size 16 \
 | 
						|
        -use_wallclock_as_timestamps 1 \
 | 
						|
        -f sndio \
 | 
						|
        -i snd/default"
 | 
						|
 | 
						|
_mic_proc="\
 | 
						|
        -af pan='stereo|c0=FL|c1=FL' \
 | 
						|
        -c:a pcm_s16le"
 | 
						|
 | 
						|
_vid_in="\
 | 
						|
        -probesize 10000000 \
 | 
						|
        -f x11grab \
 | 
						|
        -i :0.0"
 | 
						|
 | 
						|
_vid_proc="\
 | 
						|
        -framerate 30 \
 | 
						|
        -c:v libx264rgb \
 | 
						|
        -crf 0 \
 | 
						|
        -qp 0 \
 | 
						|
        -framerate 30 \
 | 
						|
        -sws_flags neighbor \
 | 
						|
        -preset ultrafast \
 | 
						|
        -tune zerolatency"
 | 
						|
 | 
						|
_map=0;
 | 
						|
 | 
						|
_ffmpeg_map=0
 | 
						|
_ffmpeg_param_input="${_vid_in}"
 | 
						|
_ffmpeg_param_procs="-map ${_ffmpeg_map}:v ${_vid_proc}"
 | 
						|
 | 
						|
if [ "${MIC}" ]; then
 | 
						|
    _ffmpeg_map=$(( _ffmpeg_map + 1 ))
 | 
						|
    _ffmpeg_param_input="${_ffmpeg_param_input} ${_mic_in}"
 | 
						|
    _ffmpeg_param_procs="${_ffmpeg_param_procs} -map ${_ffmpeg_map}:a ${_mic_proc}"
 | 
						|
fi
 | 
						|
 | 
						|
if [ "${MON}" ]; then
 | 
						|
    _ffmpeg_map=$(( _ffmpeg_map + 1 ))
 | 
						|
    _ffmpeg_param_input="${_ffmpeg_param_input} ${_mon_in}"
 | 
						|
    _ffmpeg_param_procs="${_ffmpeg_param_procs} -map ${_ffmpeg_map}:a ${_mon_proc}"
 | 
						|
fi
 | 
						|
 | 
						|
_ffmpeg_param="${_ffmpeg_param_input} ${_ffmpeg_param_procs}"
 | 
						|
 | 
						|
if [ -z "$EONLY" ]; then
 | 
						|
    printf 'Press q to stop.\n'
 | 
						|
    set -x
 | 
						|
    ffmpeg ${_head_param} ${_ffmpeg_param} "${_vidfile}"
 | 
						|
    set +x
 | 
						|
fi
 | 
						|
 | 
						|
if [ ${MON} ] || [ ${MIC} ]; then
 | 
						|
    _audio_encode_param="-filter_complex amix=inputs=${_ffmpeg_map},stereotools=phase=5,compand=attacks=0:points=-80/-115|-35.1/-80|-35/-35|20/20 -c:a aac -b:a 160k"
 | 
						|
fi
 | 
						|
 | 
						|
printf 'Encoding...\n'
 | 
						|
set -x
 | 
						|
ffmpeg -hide_banner -y \
 | 
						|
    -i "${_vidfile}" \
 | 
						|
    -c:v libx264 \
 | 
						|
    -crf 28 \
 | 
						|
    -s 1920x1080 \
 | 
						|
    -preset veryfast \
 | 
						|
    -movflags faststart \
 | 
						|
    -threads 8 \
 | 
						|
    ${_audio_encode_param} \
 | 
						|
    "${_outfile}"
 | 
						|
set +x
 | 
						|
printf '%s\n' "${_outfile}"
 |