lav2mpeg
来自「Motion JPEG编解码器源代码」· 代码 · 共 588 行 · 第 1/2 页
TXT
588 行
temp=$outputres temp=${outputres%%[+-]*} output_width=${temp%x*} output_height=${temp#*x} logIt "using output_width=$output_width, output_height=$output_height" # these don't work yet, negative values would mess them up temp=${outputres#*+} output_xoff=${temp%%[+-]*} output_yoff=${temp##*[+-]} else output_width=$video_width output_height=$video_height fi ;;esac# hopefully sane input has been checked, lets start setting things up# simple check for logonly modeif [ "$LOGONLY" != "" -a "$LOGONLY" != "0" -a $use_fifo -eq 1 ]; then use_fifo=0 logIt "can't do logonly with fifos, turning fifos off"fi# set up extra flags as possibly given by userlav2yuv_flags=$EXTRA_LAV2YUVyuvscaler_flags=$EXTRA_YUVSCALERmpeg2enc_flags=$EXTRA_MPEG2ENClav2wav_flags=$EXTRA_LAV2WAVaudioenc_flags=$EXTRA_AUDIOENCmplex_flags=$EXTRA_MPLEXyuvdenoise_flags=$EXTRA_YUVDENOISE# get output mpeg version and output file namescase $mode in vcd|vcd_medium|vcd_high|mpeg1) mpegver=1 ;; svcd|svcd_high|mpeg2) mpegver=2 ;;esacif [ "$outfile" != "" ]; then basename=${outfile%.*}else basename=${1%.*} outfile=${basename}.mpgfivideo=${basename}.m${mpegver}vaudio=${basename}.mp2if [ "$NOISYLOGFILE" = "" ]; then noisylog=${basename}.logelse noisylog=$NOISYLOGFILEfi# set up the audioif [ "$userstereo" == "" ]; then stereo=${audio_chans:-0}else stereo=$userstereofiif [ $AUDIOENC = "mp2enc" ]; then nostereo_flag="-m"else nostereo_flag="-a"fiif [ "$stereo" != "0" ]; then aencbpr=$aencbpr_stereoelse aencbpr=$aencbpr_mono mono_flag=$nostereo_flagfi# set useraencbpr to aencbpr unless setuseraencbpr=${useraencbpr:-$aencbpr}# set up always-on flagslav2yuv_flags="$lav2yuv_flags $@"case $video_norm in PAL) ysnorm="p";; SECAM) ysnorm="s";; NTSC|*) ysnorm="n";;esacyuvscaler_flags="-n $ysnorm $yuvscaler_flags"mpeg2enc_flags="-o $video $mpeg2enc_flags"lav2wav_flags="$lav2wav_flags $@"if [ $AUDIOENC = "mp2enc" ]; then audioenc_flags="$mono_flag -r 44100 ${audioenc_flags} -o $audio"else # assume toolame audioenc_flags="$mono_flag -s 44.1 /dev/stdin ${audioenc_flags} $audio"fimplex_flags=" -o $outfile $mplex_flags $audio $video"# input/output dependentif [ $video_width -eq $output_width -a $video_height -eq $output_height ]; then needscale=0;else needscale=1fidownscaling=0if [ $video_width -gt $output_width -o $video_width -eq $output_width ]; then if [ $video_height -gt $output_height -o $video_height -eq $output_height ]; then downscaling=1 fifiif [ $video_inter -eq 1 ]; then yuvdenoise_flags="$yuvdenoise_flags -F"fi#encoder quality dependentcase ${encode_quality} in 0) mpeg2enc_flags="-4 4 -2 4 ${mpeg2enc_flags}" if [ $downscaling -ne 0 ]; then yuvscaler_flags="-M RESAMPLE ${yuvscaler_flags}" fi dodenoise=0 if [ "$userdenoise" != "" -a "$userdenoise" != "0" ]; then logIt "set dodenoise to on at users request" dodenoise=1 fi ;; 2) mpeg2enc_flags="-4 1 -2 1 ${mpeg2enc_flags}" # -N here? dodenoise=1 if [ "$userdenoise" != "" -a "$userdenoise" = "0" ]; then dodenoise=0 fi ;; 1|*) dodenoise=1 if [ "$userdenoise" != "" -a "$userdenoise" = "0" ]; then dodenoise=0 fi ;;esac # output(mode) dependentcase ${mode} in vcd) yuvscaler_flags="-O VCD ${yuvscaler_flags}" mpeg2enc_flags="-a 2 -f 1 ${mpeg2enc_flags}" mplex_flags="-f 1 ${mplex_flags}" ;; vcd_medium) yuvscaler_flags="-O VCD ${yuvscaler_flags}" mpeg2enc_flags="-a 2 -f 2 -b ${VCD_MEDIUM_BR} ${mpeg2enc_flags}" mplex_flags="-f 2 ${mplex_flags}" ;; vcd_high) yuvscaler_flags="-O VCD ${yuvscaler_flags}" mpeg2enc_flags="-a 2 -f 2 -b ${VCD_HIGH_BR} ${mpeg2enc_flags}" mplex_flags="-f 2 ${mplex_flags}" ;; mpeg1) yuvscaler_flags="-O SIZE_${output_width}x${output_height} ${yuvscaler_flags}" mpeg2enc_flags="-f 0 -b ${bitrate} ${mpeg2enc_flags}" mplex_flags="-f 0 ${mplex_flags}" aencbpr=$useraencbpr ;; svcd) yuvscaler_flags="-O SVCD ${yuvscaler_flags}" mpeg2enc_flags="-a 2 -f 4 ${mpeg2enc_flags}" mplex_flags="-f 4 ${mplex_flags}" aencbpr=$useraencbpr audioenc_flags="-e $audioenc_flags" ;; svcd_high) yuvscaler_flags="-O SVCD ${yuvscaler_flags}" mpeg2enc_flags="-a 2 -f 5 -b ${SVCD_HIGH_BR} -V ${SVCD_HIGH_BUFFSIZE} -q ${SVCD_HIGH_QUAL} ${mpeg2enc_flags}" mplex_flags="-f 5 ${mplex_flags}" aencbpr=$useraencbpr audioenc_flags="-e $audioenc_flags" ;; mpeg2) yuvscaler_flags="-O SIZE_${output_width}x${output_height} ${yuvscaler_flags}" mpeg2enc_flags="-f 3 -b ${bitrate} -q $quality ${mpeg2enc_flags}" mplex_flags="-V -f 3 ${mplex_flags}" aencbpr=$useraencbpr ;;esacif [ $dodenoise -ne 0 ]; then yuvdenoise_str="| $NICE $YUVDENOISE $yuvdenoise_flags"else yuvdenoise_str="" logIt "not using yuvdenoiser, dodenoise=$dodenoise"fiif [ $needscale -ne 0 ]; then yuvscale_str="| $NICE $YUVSCALER $yuvscaler_flags"else yuvscale_str=""fi#final flags -- bitrate flag is -b for both mp2enc and toolameaudioenc_flags="-b $aencbpr $audioenc_flags"# this is kinda nasty, but it ends up giving a somewhat clean loop at the# bottom without a whole lot of if's and suchcount=1;stepdesc[$count]="video encoding"step[$count]="$NICE $LAV2YUV $lav2yuv_flags $yuvdenoise_str $yuvscale_str | $NICE $MPEG2ENC $mpeg2enc_flags"count=2;stepdesc[$count]="audio encoding"step[$count]="$NICE $LAV2WAV $lav2wav_flags | $NICE $AUDIOENC $audioenc_flags"count=3;if [ $use_fifo -eq 1 ]; then stepdesc[$count]="encoding with fifos"else stepdesc[$count]="multiplexing"fistep[$count]="$NICE $MPLEX $mplex_flags"output_noisy=""if [ $noisy -ne 0 -a $logall -ne 0 ]; then output_noisy="2>&1 | tee -a $noisylog" echo "" > $noisylogfiif [ $noisy -eq 0 ]; then if [ $logall -eq 0 ]; then noisylog="/dev/null" fi echo "" > $noisylog output_noisy=">>$noisylog 2>&1"fidetach=""if [ $use_fifo -ne 0 ]; then detach="&"; saveraw=0 rm -f $video $audio mkfifo $video mkfifo $audiofilogIt "using mode=$mode, stereo=$stereo audio bpr=$aencbpr"if [ $logall -ne 0 ]; then logIt "logging everything to $noisylog"filogIt "beginning conversion of $@ to $outfile"logIt "had $video_frames to encode"STARTALL=$SECONDSfor stepnum in 1 2 3do count=$stepnum START=$SECONDS if [ $stepnum -eq 3 -o $use_fifo -ne 1 ]; then logIt "beginning ${stepdesc[$count]}" if [ $LOGCOMMANDS != "0" ]; then logIt "COMMAND=${step[$count]}" fi fi if [ $stepnum -eq 3 ]; then detach="" # don't detach the last stem (mplex) fi eval doStep $output_noisy $detach RET=$? if [ $RET -ne 0 ]; then logIt "ugh! ${stepdesc[$count]} failed, bailing. used command:" logIt "${step[$count]}" cleanExit $RET fi if [ $stepnum -eq 3 -o $use_fifo -ne 1 ]; then diff=$(getTimeDiff $START $SECONDS) elapsed=$(expr $SECONDS - $START) if [ "$elapsed" != "0" ]; then fps=$(echo "scale=3; $video_frames / $elapsed " | bc) logIt "finished ${stepdesc[$count]} ( took $diff - $fps fps)" else logIt "finished ${stepdesc[$count]} ( took $diff )" fi fidoneEND=$SECONDSdiff=$(getTimeDiff $STARTALL $SECONDS)temp=$(expr $SECONDS - $STARTALL)if [ "$temp" != "0" ]; then # avoid divide by zero possibility fps=$(echo "scale=3; $video_frames / $temp" | bc) logIt "finished encoding (took $diff - $fps fps)"else logIt "finished encoding (took $diff)"ficleanExit 0
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?