encode2mpeglight
来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· 代码 · 共 1,545 行 · 第 1/5 页
TXT
1,545 行
esac ;; mp3) case ${mpegchannels:-2} in 1) : ${abr:=64} ;; 2) : ${abr:=128} ;; esac ;; ac3) case ${mpegchannels:-2} in 1) : ${abr:=96} ;; 2) : ${abr:=192} ;; 3) : ${abr:=320} ;; # to verify 4) : ${abr:=384} ;; # to verify 5) : ${abr:=448} ;; # to verify 6) : ${abr:=448} ;; esac ;; aac) : ${abr:=$((${mpegchannels:-2}*48))} ;; #### mplex fails with asr != 48000 for lpcm lpcm) : ${asr:=48000} ${abr:=$((asr*16*${mpegchannels:-2}/1024))} ;;esacif [[ ${encode%,*} == 0:?:? && ${!audioformat} = copy ]]; then abr=0 if [[ ! $multiaudio ]]; then get_abr fifi[[ $mpeg && ${encode%,*} == ?:0:? ]] && \ vbr=$(($(id_find ID_VIDEO_BITRATE "${MPLAYEROPT[@]}" ${dvddev:+-dvd-device "$dvddev"} "$@")/1000))case $frameformat in DVD) : ${asr:=48000} ;; *) : ${asr:=44100} ;;esaccase $videonorm in p|s) : ${vfr:=3} ;; n) [[ $frameformat != VCD && ! $vfr && $hispeed -eq 0 && ! $testmca ]] && vfr=1 && telecine=1 : ${vfr:=4} ;;esac[[ $encode && ${encode%,*} != ?:0:? ]] && : ${vfr:=2}if [[ ! $ofps ]]; then case $vfr in 1) ofps=24000/1001 ;; 2) ofps=24 ;; 3) ofps=25 ;; 4) ofps=30000/1001 ;; 5) ofps=30 ;; 6) ofps=50 ;; 7) ofps=60000/1001 ;; 8) ofps=60 ;; esacfiif [[ $split && $split -eq 0 ]]; then [[ $mpeg ]] && split= || split=800fi################################################################################### get MPlayer version###############################################################################mver=$(mencoder 2>/dev/null | awk '$1=="MEncoder"{print $2;exit}')################################################################################### threads check###############################################################################if [[ ! $cpu && -f /proc/cpuinfo ]]; then cpu=$(grep -c ^processor /proc/cpuinfo) #### if there are 2 logical cpu but 1 physical (hyperthreading) #### use only one thread. With kernel 2.4.x it is more efficent. ((cpu==2)) && [[ $(uname -r | cut -f 1-2 -d .) = 2.4 ]] && \ [[ $(grep ^siblings /proc/cpuinfo | uniq | wc -l) -eq 1 ]] && \ cpu=$((cpu/$(grep ^siblings /proc/cpuinfo | uniq | awk 'END{print $NF}')))fi((cpu<2)) && cpu=################################################################################### -ao pcm arguments###############################################################################PCMWAV=(pcm:waveheader:fast:file=%$((${#output}+4))%"$output".wav)PCMTMP=(pcm:waveheader:fast:file=%$((${#output}+4))%"$output".tmp)PCMNOWYUV=(pcm:nowaveheader:fast:file=/dev/fd/4)[[ $dvddev ]] && MPLAYEROPT=( "${MPLAYEROPT[@]}" -dvd-device "$dvddev" )################################################################################### mplayer/mencoder/mjpegtools options################################################################################### mencoder output suffixif [[ $encode ]]; then [[ $mpeg ]] && SUF=mpeg || SUF=avifi#### MPLAYERINFO is used for [info]MPLAYERINFO=( "${MPLAYEROPT[@]}" )#### mf:// caseif [[ $pictsrc ]]; then if [[ $slideaudio && $slideaudio != /dev/null ]]; then [[ $(id_find ID_AUDIO_RATE "$slideaudio") != $asr ]] && SRATE="-srate $asr -af-adv force=1" || SRATE= CLEAN[${#CLEAN[*]}]="$output".wav mplayer "$slideaudio" $SRATE -vo null -vc dummy -ao "${PCMWAV[@]}" $afm ${mpegchannels:+-channels $mpegchannels -af channels=$mpegchannels} MPLAYEROPT=( "${MPLAYEROPT[@]}" -fps 1/$(id_find ID_LENGTH "$output".wav) -audiofile "$output".wav ) else if [[ $slideaudio == /dev/null ]]; then MPLAYEROPT=( "${MPLAYEROPT[@]}" -fps $slidefps ) encode=0:${encode#?:} else MPLAYEROPT=( "${MPLAYEROPT[@]}" -fps $slidefps -audiofile /dev/zero -audio-demuxer 20 -rawaudio format=0x1:rate=48000 ) fi fifi#### MENCODERARG is used for mencoding, vobsub dumpingMENCODERARG=( "${MPLAYEROPT[@]}" ${frames:+-frames $frames} )MENCODERARG=( "${MENCODERARG[@]}" "${MENCODEROPT[@]}" ${endpos:+-endpos $endpos} ${ofps:+-ofps $ofps} )if [[ $mpeg && $mpegchannels ]]; then MENCODERARG=( "${MENCODERARG[@]}" -channels $mpegchannels ) af=$(echo "${af:--af }${af:+,}" | sed 's/channels=[^,]*,//')channels=$mpegchannelselif [[ $channels ]]; then MENCODERARG=( "${MENCODERARG[@]}" -channels $channels ) af=$(echo "${af:--af }${af:+,}" | sed 's/channels=[^,]*,//')channels=$channelsfiYUVSCALEROPT="-v 1 -n $videonorm ${scale:+-O $frameformat} $YUVSCALEROPT"MPEG2ENCOPT="${cpu:+-M $cpu }-v 1 -S ${split:-50000} -n $videonorm -F $vfr -s -r 16 ${telecine:+-p} $MPEG2ENCOPT"case $vfr in 1|2) MPEG2ENCOPT="-g 6 -G ${GOP:-12} $MPEG2ENCOPT" ;; 3|6) MPEG2ENCOPT="-g 6 -G ${GOP:-15} $MPEG2ENCOPT" ;; 4|5|7|8) MPEG2ENCOPT="-g 9 -G ${GOP:-18} $MPEG2ENCOPT" ;;esac[[ $frameformat = VCD ]] && MPEG2ENCOPT="-R 2 $MPEG2ENCOPT"echo "$MPEG2ENCOPT" | grep -q -e '-K hi-res' && YUVSCALEROPT="-M BICUBIC $YUVSCALEROPT" && \ MPEG2ENCOPT="-4 1 -2 1 $MPEG2ENCOPT" || MPEG2ENCOPT="-4 2 -2 1 $MPEG2ENCOPT"case $frameformat in VCD) MPGRES=${MPGRES:-1} ;; SVCD) case $frameres in 1) MPGRES=${MPGRES:-3} ;; 2) MPGRES=${MPGRES:-1} ;; esac ;; DVD) case $frameres in 1) MPGRES=${MPGRES:-7} ;; 2) MPGRES=${MPGRES:-6} ;; 3) MPGRES=${MPGRES:-3} ;; 4) MPGRES=${MPGRES:-2} ;; 5) MPGRES=${MPGRES:-1} ;; esac ;;esaccase $MPGRES in 1) H_RES=352 ; [[ $videonorm = n ]] && V_RES=240 || V_RES=288 ;; 2) H_RES=352 ; [[ $videonorm = n ]] && V_RES=480 || V_RES=576 ;; 3) H_RES=480 ; [[ $videonorm = n ]] && V_RES=480 || V_RES=576 ;; 4) H_RES=528 ; [[ $videonorm = n ]] && V_RES=480 || V_RES=576 ;; 5) H_RES=544 ; [[ $videonorm = n ]] && V_RES=480 || V_RES=576 ;; 6) H_RES=704 ; [[ $videonorm = n ]] && V_RES=480 || V_RES=576 ;; 7) H_RES=720 ; [[ $videonorm = n ]] && V_RES=480 || V_RES=576 ;;esaccase $frameformat in VCD) : ${vbr:=1152} MPEG2ENCOPT="-f 2 -b $vbr -V 46 -B $(((abr*audiostream*101875-vbr*2819+3980000)/100000)) $MPEG2ENCOPT" MPLEXOPT="-f 2 -V -b 46 -r $(((abr*audiostream+vbr)*4)) $MPLEXOPT" VCDIMAGEROPT="-t vcd2 $VCDIMAGEROPT" H_STILL=704 [[ $videonorm = n ]] && V_STILL=480 || V_STILL=576 ((MPGRES!=1)) && YUVSCALEROPT="-O SIZE_${H_RES}x${V_RES} ${YUVSCALEROPT/ -O $frameformat}" MAXBR=1394 ;; SVCD) : ${vbr:=2500} MPEG2ENCOPT="-f 5 -b $vbr -V 113 -B $(((abr*audiostream*101250+vbr*742+1665400)/100000)) $MPEG2ENCOPT" MPLEXOPT="-V -b 113 -r $(((abr*audiostream+vbr)*4)) $MPLEXOPT" if [[ $trick ]]; then MPLEXOPT="-f 2 $MPLEXOPT" VCDIMAGEROPT="-t vcd2 $VCDIMAGEROPT" else MPLEXOPT="-f 5 $MPLEXOPT" VCDIMAGEROPT="-t svcd $VCDIMAGEROPT" fi H_STILL=704 [[ $videonorm = n ]] && V_STILL=480 || V_STILL=576 ((frameres>1||MPGRES!=3)) && YUVSCALEROPT="-O SIZE_${H_RES}x${V_RES} ${YUVSCALEROPT/ -O $frameformat}" MAXBR=2778 ;; DVD) : ${vbr:=7500} MPEG2ENCOPT="-f 8 -b $vbr -V 230 -B $(((abr*audiostream*101250+vbr*742+1665400)/100000)) $MPEG2ENCOPT" MPLEXOPT="-f 8 -V -b 230 -r $(((abr*audiostream+vbr)*4)) $MPLEXOPT" H_STILL=720 [[ $videonorm = n ]] && V_STILL=480 || V_STILL=576 ((frameres>1||MPGRES!=7)) && YUVSCALEROPT="-O SIZE_${H_RES}x${V_RES} ${YUVSCALEROPT/ -O $frameformat}" MAXBR=10080 ;;esac################################################################################### mencoder audio/video/pass options###############################################################################if [[ $encode ]]; then OPTIONS="-noskiplimit -sws $((hispeed?1:7))" if [[ $mpeg ]]; then # mencoder can put in the MPEG container: # video: mpeg1, mpeg2, mpeg4 # audio: mp1, mp2, mp3, ac3, aac (not yet: lpcm, dts) [[ ${encode%,*} != ?:0:? ]] && : ${mpegaspect:=2} #MUX="-mpegopts ${mpegaspect:+vaspect=${ASPECT[mpegaspect]}:}:vbitrate=${vbr}" MUX="-mpegopts " if [[ $telecine ]]; then if [[ $vcodec = mpeg2video || ! $vcodec && $frameformat != VCD ]]; then if [[ $vfr == [12] ]]; then [[ $videonorm = n ]] && MUX2=":telecine" || MUX2=":film2pal" else do_log "++ WARN: [$PROGNAME] telecine only works with 24000/1001 or 24 fps, disabling it" fi else do_log "++ WARN: [$PROGNAME] telecine only works for MPEG-2, disabling it" fi fi case $frameformat in VCD) MUX="${MUX}format=xvcd" LAVC="vcodec=${vcodec:-mpeg1video}${LAVC:-:vrc_buf_size=327:vrc_minrate=${vbr}:vrc_maxrate=${vbr}}" ;; SVCD) if [[ $trick ]]; then MUX="${MUX}format=xvcd" ; else MUX="${MUX}format=xsvcd" ; fi ; LAVC="vcodec=${vcodec:-mpeg2video}:vrc_buf_size=917" ;; DVD) MUX="${MUX}format=dvd" LAVC="vcodec=${vcodec:-mpeg2video}:vrc_buf_size=1835" ;; esac case $vfr in 1|2) LAVC="$LAVC:keyint=$((hispeed?1:${GOP:-12}))" ;; 3|6) LAVC="$LAVC:keyint=$((hispeed?1:${GOP:-15}))" ;; 4|5|7|8) LAVC="$LAVC:keyint=$((hispeed?1:${GOP:-18}))" ;; esac [[ $frameformat = VCD && ! $bframes ]] && LAVC="$LAVC:vmax_b_frames=2" [[ $mpegmbr ]] && [[ $mpegmbr -lt $vbr ]] && mpegmbr=$vbr #### -a 1 is SAR=1 (do not scale), not DAR=1 [[ $mpegaspect != 1 ]] && LAVC="${LAVC}:aspect=${ASPECT[mpegaspect]}" LAVC="${LAVC}${mpegmbr:+:vrc_maxrate=$mpegmbr}${inter_matrix:+:inter_matrix=${inter_matrix}}${intra_matrix:+:intra_matrix=${intra_matrix}}" OF="-of mpeg" NOSKIP=-noskip vbitrate=$vbr if [[ ${encode%,*} != ?:0:? ]]; then for ((a=0;a<${#MENCODERARG[*]};a++)); do while [[ ${MENCODERARG[a]} = -vf ]]; do unset MENCODERARG[a] MENCODERARG[a+1] MENCODERARG=( "${MENCODERARG[@]}" ) done done MENCODERARG=( "${MENCODERARG[@]}" ${vf:--vf }${vf:+,}${scale:+scale=${H_RES}:${V_RES}${interlaced:+:1},}harddup ) fi fi BASIC="$LAVC:vbitrate=${vbitrate}${cpu:+:threads=$cpu}${bframes:+:vmax_b_frames=$bframes}" ((hispeed)) && BASIC="$BASIC:vme=0" || BASIC="$BASIC:psnr" [[ $mpeg && $frameformat = VCD ]] || BASIC="$BASIC${interlaced:+:ildct:ilme}" echo "$YUVSCALEROPT" | grep -q -e '-O MONOCHROME' && BASIC="$BASIC:gray" HQ="${BASIC}:mbd=2" if [[ $mpeg ]]; then #### dia=6 could be added BESTSIZE="${BASIC}:mbd=1:loop:mv0:vlelim=-4:vcelim=7:trell:precmp=1:cmp=1:subcmp=1" [[ ! $bframes ]] && BESTSIZE="$BESTSIZE:vmax_b_frames=2" #### last_pred=1-2 could be added BESTQUALITY="${BASIC}:mbd=2:mv0:precmp=6:cmp=6:subcmp=6" [[ $vbitrate -ge 3500 && $frameformat != VCD && $vcodec != mpeg1video ]] && BESTQUALITY="$BESTQUALITY:dc=9" fi case $encode in 0:?:?|0:?:?,*) AUDIOPASS="-oac copy" ;; 1:?:?|1:?:?,*) AUDIOPASS="-oac pcm" ;; 2:?:?|2:?:?,*) AUDIOPASS="-oac mp3lame -lameopts ${acustom:-fast}" ;; 3:?:?) AUDIOPASS="-oac mp3lame -lameopts preset=standard" ;; 4:?:?) AUDIOPASS="-oac lavc -lavcopts acodec=mp2:abitrate=$abr" ;; 5:?:?) AUDIOPASS="-oac lavc -lavcopts acodec=mp3:abitrate=$abr" ;; 6:?:?) AUDIOPASS="-oac lavc -lavcopts acodec=ac3:abitrate=$abr" ;; 7:?:?) AUDIOPASS="-oac $TOOLAME -${TOOLAME}opts br=$abr" ;; 8:?:?) AUDIOPASS="-oac faac -faacopts ${acustom:-br=$abr}" ;; 3:?:?,*) AUDIOPASS="-oac mp3lame -lameopts preset=${encode#*,}" ;; 4:?:?,*) AUDIOPASS="-oac lavc -lavcopts acodec=mp2:abitrate=${encode#*,}" ;; 5:?:?,*) AUDIOPASS="-oac lavc -lavcopts acodec=mp3:abitrate=${encode#*,}" ;; 6:?:?,*) AUDIOPASS="-oac lavc -lavcopts acodec=ac3:abitrate=${encode#*,}" ;; 7:?:?,*) AUDIOPASS="-oac $TOOLAME -${TOOLAME}opts br=${encode#*,}" ;; 8:?:?,*) AUDIOPASS="-oac faac -faacopts ${acustom:-br=${encode#*,}}" ;; esac encode=${encode%,*} case $encode in ?:0:?) VIDEOPASS="$OF $MUX -ovc copy $NOSKIP" ; encode=${encode%%:*}:0:1 ; turbo=0 ;; # copy uses only one pass ?:1:?) VIDEOPASS="$OF $MUX$MUX2 -ovc lavc -lavcopts ${BASIC}${vcustom:+:$vcustom}" ; : ${turbo:=0} ;; ?:2:?) VIDEOPASS="$OF $MUX$MUX2 -ovc lavc -lavcopts ${HQ}" ; : ${turbo:=1} ;; ?:3:?) VIDEOPASS="$OF $MUX$MUX2 -ovc lavc -lavcopts ${BESTSIZE}" ; : ${turbo:=1} ;; ?:4:?) VIDEOPASS="$OF $MUX$MUX2 -ovc lavc -lavcopts ${BESTQUALITY}" ; : ${turbo:=1} ;; esac ((turbo)) && turbo=:turbo || turbo= PASS=${encode##*:} [[ $normalize && $encode != 0:?:? ]] && af=${af:--af }${af:+,}volnormfi################################################################################### more functions###############################################################################
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?