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 + -
显示快捷键?