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