anytovcd.sh

来自「Motion JPEG编解码器源代码」· Shell 代码 · 共 1,015 行 · 第 1/2 页

SH
1,015
字号
    VID_FMT_OUT="m2v"    VID_MINRATE_OUT="0"    VID_MAXRATE_OUT="7500"    VID_SAR_525_OUT="80:33"    VID_SAR_625_OUT="236:81"    VID_SIZE_525_OUT="352x480"    VID_SIZE_625_OUT="352x576"        AUD_FMT_OUT="ac3"    AUD_BITRATE_OUT="192"    AUD_FREQ_OUT="48000"    AUD_CHANNELS_OUT="2"        VOL_SIZE="4700"elif test "${VCD_TYPE}" == "dvd"; then    FF_ENC="${FF_ENC} -target dvd -f rawvideo -dc 10"    MPEG2ENC="${MPEG2ENC} -f 8 -D 10"    Y4MSCALER="${Y4MSCALER} -O preset=dvd"    MPLEX="${MPLEX} -f 8"    VID_FMT_OUT="m2v"    VID_MINRATE_OUT="0"    VID_MAXRATE_OUT="8000"        VID_SAR_525_OUT="10:11"    VID_SAR_625_OUT="59:54"    VID_SIZE_525_OUT="720x480"    VID_SIZE_625_OUT="720x576"        AUD_FMT_OUT="ac3"    AUD_BITRATE_OUT="192"    AUD_FREQ_OUT="48000"    AUD_CHANNELS_OUT="2"        VOL_SIZE="4700"elif test "${VCD_TYPE}" == "dvd_wide"; then    FF_ENC="${FF_ENC} -target dvd -f rawvideo -dc 10"    MPEG2ENC="${MPEG2ENC} -f 8 -D 10"    Y4MSCALER="${Y4MSCALER} -O preset=dvd_wide"    MPLEX="${MPLEX} -f 8"    VID_FMT_OUT="m2v"    VID_MINRATE_OUT="0"    VID_MAXRATE_OUT="8000"        VID_SAR_525_OUT="40:33"    VID_SAR_625_OUT="118:81"    VID_SIZE_525_OUT="720x480"    VID_SIZE_625_OUT="720x576"        AUD_FMT_OUT="ac3"    AUD_BITRATE_OUT="192"    AUD_FREQ_OUT="48000"    AUD_CHANNELS_OUT="2"        VOL_SIZE="4700"elif test "${VCD_TYPE}" == "mvcd"; then    FF_ENC="${FF_ENC} -vcodec mpeg1video -f rawvideo -bufsize 40 -me_range 64"    MPEG2ENC="${MPEG2ENC} -f 2 -g 12 -G 24 -B 256 -S 797"    Y4MSCALER="${Y4MSCALER} -O preset=vcd"    MPLEX="${MPLEX} -f 2 -r 1400 -V"    MATRICES="mvcd"    VID_FMT_OUT="m1v"    VID_ILACE_OUT="p"    VID_MINRATE_OUT="0"    VID_MAXRATE_OUT="1152"        VID_SAR_525_OUT="10:11"    VID_SAR_625_OUT="59:54"    VID_SIZE_525_OUT="352x240"    VID_SIZE_625_OUT="352x288"        AUD_FMT_OUT="mp2"    AUD_BITRATE_OUT="128"    AUD_FREQ_OUT="44100"    AUD_CHANNELS_OUT="2"        # 360000 sectors * 2324 bytes per sector / 1000 / 1000    VOL_SIZE="836"elif test "${VCD_TYPE}" == "svcd"; then    FF_ENC="${FF_ENC} -target svcd -f rawvideo"    MPEG2ENC="${MPEG2ENC} -f 4 -B 256 -S 797"    Y4MSCALER="${Y4MSCALER} -O preset=svcd"    MPLEX="${MPLEX} -f 4"    VID_FMT_OUT="m2v"    VID_MINRATE_OUT="0"    VID_MAXRATE_OUT="2500"        VID_SAR_525_OUT="15:11"    VID_SAR_625_OUT="59:36"    VID_SIZE_525_OUT="480x480"    VID_SIZE_625_OUT="480x576"        AUD_FMT_OUT="mp2"    AUD_BITRATE_OUT="224"    AUD_FREQ_OUT="44100"    AUD_CHANNELS_OUT="2"        VOL_SIZE="836"elif test "${VCD_TYPE}" == "vcd"; then    ENC_TYPE="cbr"    FF_ENC="${FF_ENC} -target vcd -f rawvideo -me_range 64"    MPEG2ENC="${MPEG2ENC} -f 1 -B 256 -S 797"    Y4MSCALER="${Y4MSCALER} -O preset=vcd"    MPLEX="${MPLEX} -f 1"    VID_FMT_OUT="m1v"    VID_ILACE_OUT="p"        VID_SAR_525_OUT="10:11"    VID_SAR_625_OUT="59:54"    VID_SIZE_525_OUT="352x240"    VID_SIZE_625_OUT="352x288"        AUD_FMT_OUT="mp2"    AUD_BITRATE_OUT="224"    AUD_FREQ_OUT="44100"    AUD_CHANNELS_OUT="2"        VOL_SIZE="836"else    show_error "the specified output type/profile is inexistant."    show_help    exit 2fi# audio pass-throughif test "${ACOPY_MODE}" == "1"; then    AUD_BITRATE_OUT="${AUD_BITRATE_SRC}"    AUD_FMT_OUT="${AUD_FMT_SRC}"    AUD_FREQ_OUT="${AUD_FREQ_SRC}"fi# output filenamesVIDEO_OUT="${PREFIX_OUT}.${VID_FMT_OUT}"AUDIO_OUT="${PREFIX_OUT}.${AUD_FMT_OUT}"MPEG_OUT="${PREFIX_OUT}-%d.mpg"# output interlacingif test "${VID_ILACE_OUT}" == "b"; then    FF_ENC="${FF_ENC} -ildct -ilme -top 0"    MPEG2ENC="${MPEG2ENC} -I 1 -z b"elif test "${VID_ILACE_OUT}" == "t"; then    FF_ENC="${FF_ENC} -ildct -ilme -top 1"    MPEG2ENC="${MPEG2ENC} -I 1 -z t"else    MPEG2ENC="${MPEG2ENC} -I 0"fi# output framerateif test "${VID_FPS_SRC}" == "30000:1001" || test "${VID_FPS_SRC}" == "24000:1001" || test "${VID_FPS_SRC}" == "25:1"; then    VID_FPS_OUT="${VID_FPS_SRC}"elif test "${OUT_NORM}" == "ntsc"; then    VID_FPS_OUT="30000:1001"elif test "${OUT_NORM}" == "ntsc_film"; then    VID_FPS_OUT="24000:1001"else    VID_FPS_OUT="25:1"fi# output sar and framesize for pal/ntscif test "${VID_FPS_OUT}" == "25:1"; then    VID_SAR_OUT="${VID_SAR_625_OUT}"    VID_SIZE_OUT="${VID_SIZE_625_OUT}"else    VID_SAR_OUT="${VID_SAR_525_OUT}"    VID_SIZE_OUT="${VID_SIZE_525_OUT}"fi# cvd_wide "preset" for y4mscalerif test "${VCD_TYPE}" == "cvd_wide"; then    Y4MSCALER="${Y4MSCALER} -O sar=${VID_SAR_OUT} -O size=${VID_SIZE_OUT}"fi# pipe bufferif which ${BFR} >/dev/null; then    PIPE_BUFFER="${BFR} -b 16m |"fi# video decoderif test "${DEC_TOOL}" == "mpeg2dec"; then    test_bin ${MPEG2DEC}    DECODER="${MPEG2DEC} -s -o pgmpipe \"${VIDEO_SRC}\" | ${PGMTOY4M} |"elif test "${DEC_TOOL}" == "ffmpeg"; then    test_bin ${FFMPEG}    DECODER="${FF_DEC} -y /dev/stdout | ${PGMTOY4M} |"else    show_error "the specified video decoder tool is not used by this script."    show_help    exit 2fi# video filterif test "${FILTERING}" == "none"; then    FILTER=""elif test "${FILTER_TYPE}" == "hqdenoise"; then    test_bin ${Y4MDENOISE}    FILTER="${Y4MDENOISE} ${Y4MDENOISE_FLAGS} |"elif test "${FILTER_TYPE}" == "mean"; then        test_bin ${YUVMEDIANFILTER}    FILTER="${MEAN_FILTER} |"elif test "${FILTER_TYPE}" == "median"; then    test_bin ${YUVMEDIANFILTER}    FILTER="${YUVMEDIANFILTER} |"elif test "${FILTER_TYPE}" == "spatial"; then    test_bin ${Y4MSPATIALFILTER}    FILTER="${Y4MSPATIALFILTER} |"elif test "${FILTER_TYPE}" == "temporal"; then    test_bin ${YUVDENOISE}    FILTER="${YUVDENOISE} |"elif test "${FILTER_TYPE}" == "unsharp"; then    test_bin ${Y4MUNSHARP}    FILTER="${Y4MUNSHARP} |"else    show_error "the specified filter tool is not used by this script."    show_help    exit 2fi# video framerate correctionif test "${VID_FPS_SRC}" == "${VID_FPS_OUT}"; then    FRC=""else    test_bin ${YUVFPS}    FRC="${YUVFPS} -r ${VID_FPS_OUT} |"fi# video "deinterlacer"if test "${VID_ILACE_SRC}" != "p" && test "${VID_ILACE_OUT}" == "p"; then    Y4MSCALER="${Y4MSCALER} -I ilace=top_only"fi# video scalerif test "${VID_SAR_SRC}" == "${VID_SAR_OUT}" && test "${VID_SIZE_SRC}" == "${VID_SIZE_OUT}"; then    SCALER=""else    test_bin ${Y4MSCALER}    SCALER="${Y4MSCALER} |"fi# 3:2 pulldownif test "${VID_FPS_OUT}" == "24000:1001" && test "${VID_FMT_OUT}" == "m2v"; then    FF_ENC="${FF_ENC}"    MPEG2ENC="${MPEG2ENC} -p"fi# quantisation matricesif test "${MATRICES}" == "kvcd"; then    FF_ENC="${FF_ENC} -intra_matrix ${INTRA_KVCD} -inter_matrix ${INTER_KVCD}"    MPEG2ENC="${MPEG2ENC} -K kvcd"elif test "${MATRICES}" == "mvcd"; then    echo "`matrix_copy ${INTRA_MVCD}`" > ${CQMFILE}    echo "`matrix_copy ${INTER_MVCD}`" >> ${CQMFILE}    FF_ENC="${FF_ENC} -intra_matrix ${INTRA_MVCD} -inter_matrix ${INTER_MVCD}"    MPEG2ENC="${MPEG2ENC} -K file=${CQMFILE}"elif test "${MATRICES}" == "tmpgenc"; then    FF_ENC="${FF_ENC} -intra_matrix ${INTRA_TMPGENC} -inter_matrix ${INTER_TMPGENC}"    MPEG2ENC="${MPEG2ENC} -K tmpgenc"fi# video encoding modeif test "${ENC_TYPE}" == "cbr"; then    # when using -q with mpeg2enc, variable bitrate is selected.    # it's not ok for vcds...    MPEG2ENC="${MPEG2ENC}"elif test "${ENC_TYPE}" == "abr"; then    if test "${DURATION}" != ""; then            # input total time (seconds)        VID_TIME_SRC="`echo "${DURATION}" | \        awk '{print $1 * 60}'`"    else            # input length (frames)        if echo "${VID_FMT_SRC}" | grep -e mpeg1 -e mpeg2 >/dev/null 2>&1; then	            test_bin ${TCCAT} && test_bin ${TCDEMUX}            VID_LENGTH_SRC="`probe_mpeg_length "${VIDEO_SRC}"`"        else            test_bin ${TCPROBE}            VID_LENGTH_SRC="`probe_vid_length "${VIDEO_SRC}"`"        fi        # input total time (seconds) = nb of frames / fps        VID_TIME_SRC="`echo "${VID_LENGTH_SRC}:${VID_FPS_SRC}" | \        awk -F: '{print $1 / $2 * $3 + 1}'`"    fi        test_bin bc        # available kbits (k = 1000) per second = global bitrate    BPS="`echo "${VOLUMES} * ${VOL_SIZE} * 1000 * 8 / ${VID_TIME_SRC}" | bc`"        # muxing-overhead: 3% (0.97 * ...)    VID_BITRATE_OUT="`echo "0.97 * ${BPS} - ${AUD_BITRATE_OUT}" | bc | \    awk -F. '{print $1}'`"        VID_BITRATE_OUT="`range_check ${VID_BITRATE_OUT} ${VID_MINRATE_OUT} ${VID_MAXRATE_OUT}`"        FF_ENC="${FF_ENC} -minrate ${VID_MINRATE_OUT} -maxrate ${VID_MAXRATE_OUT} -b ${VID_BITRATE_OUT} -passlogfile ${STATFILE}"        FF_STATS="${FF_ENC} -pass 1"    MPEG2ENC_STATS="${MPEG2ENC} -b ${VID_BITRATE_OUT} -q 1 -v 1 2>${STATFILE}"        FF_ENC="${FF_ENC} -pass 2"    MPEG2ENC="${MPEG2ENC}"else    FF_ENC="${FF_ENC} -maxrate ${VID_MAXRATE_OUT} -qscale ${QUANT}"    MPEG2ENC="${MPEG2ENC} -b ${VID_MAXRATE_OUT} -q ${QUANT}"fi# video encoderif test "${ENC_TOOL}" == "ffmpeg"; then    test_bin ${FFMPEG}    ANALYSER="${FF_STATS} -y \"${VIDEO_OUT}\""    ENCODER="${FF_ENC} -y \"${VIDEO_OUT}\""elif test "${ENC_TOOL}" == "mpeg2enc"; then    test_bin ${MPEG2ENC}    ANALYSER="${MPEG2ENC_STATS} -o \"${VIDEO_OUT}\""    ENCODER="${MPEG2ENC} -o \"${VIDEO_OUT}\""else    show_error "the specified video encoder tool is not used by this script."    show_help    exit 2fi# audio resamplerif test "${AUD_FREQ_SRC}" == "${AUD_FREQ_OUT}"; then    AUDIO_RESAMPLER=""else    test_bin ${SOX}    AUDIO_RESAMPLER="${SOX} -t au /dev/stdin -r ${AUD_FREQ_OUT} -t au /dev/stdout polyphase |"fi# audio decoder/encoderif test "${ACOPY_MODE}" == "1"; then    AUDIO_DECODER="${FFMPEG} ${FF_DEC_AFLAGS}"    AUDIO_ENCODER="-acodec copy -y \"${AUDIO_OUT}\""elif test "${AUD_FREQ_SRC}" == "${AUD_FREQ_OUT}"; then    AUDIO_DECODER="${FFMPEG} ${FF_DEC_AFLAGS}"    AUDIO_ENCODER="-ab ${AUD_BITRATE_OUT} -ac ${AUD_CHANNELS_OUT} -y \"${AUDIO_OUT}\""else    AUDIO_DECODER="${FFMPEG} ${FF_DEC_AFLAGS} -v 0 -f au -y /dev/stdout |"    AUDIO_ENCODER="${FFMPEG} -f au -i /dev/stdin -ab ${AUD_BITRATE_OUT} -ac ${AUD_CHANNELS_OUT} -y \"${AUDIO_OUT}\""fi# output some info.show_info "===== SOURCE STREAM ====================="show_info "           frame size: ${VID_SIZE_SRC}"show_info "           frame rate: ${VID_FPS_SRC}"show_info "          interlacing: ${VID_ILACE_SRC}"show_info "   pixel aspect ratio: ${VID_SAR_SRC}"show_info "===== OUTPUT STREAM ====================="show_info "           frame size: ${VID_SIZE_OUT}"show_info "           frame rate: ${VID_FPS_OUT}"show_info "          interlacing: ${VID_ILACE_OUT}"show_info "   pixel aspect ratio: ${VID_SAR_OUT}"# video "analyse"if ! test "${BLIND_MODE}" == "1" && test "${ENC_TYPE}" == "abr"; then    eval "${DECODER} ${FILTER} ${FRC} ${SCALER} ${PIPE_BUFFER} ${ANALYSER}"        if test "${ENC_TOOL}" == "mpeg2enc"; then            QUANT="`mpeg2enc_statfile_analyse ${STATFILE}`"        QUANT="`range_check $QUANT 3 31`"        ENCODER="${MPEG2ENC} -b ${VID_MAXRATE_OUT} -q ${QUANT} -o ${VIDEO_OUT}"    fifi# video (de)codingif ! test "${BLIND_MODE}" == "1"; then    eval "${DECODER} ${FILTER} ${FRC} ${SCALER} ${PIPE_BUFFER} ${ENCODER}"fi# audio (de)codingif ! test "${MUTE_MODE}" == "1"; then    eval "${AUDIO_DECODER} ${AUDIO_RESAMPLER} ${AUDIO_ENCODER}"fi# multiplexingif ! test "${BLIND_MODE}" == "1" && ! test "${MUTE_MODE}" == "1"; then    ${MPLEX} -o "${MPEG_OUT}" "${VIDEO_OUT}" "${AUDIO_OUT}"firm -f ${CQMFILE} ${STATFILE}exit 0

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?