É possível canalizar e filtrar a saída do HandbrakeCli ou silenciá-la no Windows

0

Eu tenho um arquivo de vídeo de memórias pessoais organizadas em várias pastas. Os arquivos de vídeo têm vários tipos de arquivos e a relação qualidade / tamanho é péssima (alguns são até 20mb / s para um vídeo 720p).

Eu quero converter cada vídeo em 720p e substituí-lo pelo arquivo convertido, mas somente quando a conversão for bem-sucedida.

Aqui está minha predefinição do Handbrake exportada para json:

{
  "PresetList": [
    {
      "AlignAVStart": true,
      "AudioCopyMask": [
        "copy:aac",
        "copy:ac3",
        "copy:dtshd",
        "copy:dts",
        "copy:mp3",
        "copy:truehd",
        "copy:flac",
        "copy:eac3"
      ],
      "AudioEncoderFallback": "ac3",
      "AudioLanguageList": [],
      "AudioList": [
        {
          "AudioBitrate": 128,
          "AudioCompressionLevel": 0.0,
          "AudioEncoder": "av_aac",
          "AudioMixdown": "stereo",
          "AudioNormalizeMixLevel": false,
          "AudioSamplerate": "44.1",
          "AudioTrackQualityEnable": false,
          "AudioTrackQuality": -1.0,
          "AudioTrackGainSlider": 0.0,
          "AudioTrackDRCSlider": 0.0
        }
      ],
      "AudioSecondaryEncoderMode": true,
      "AudioTrackSelectionBehavior": "first",
      "ChapterMarkers": true,
      "ChildrenArray": [],
      "Default": false,
      "FileFormat": "av_mp4",
      "Folder": false,
      "FolderOpen": false,
      "Mp4HttpOptimize": false,
      "Mp4iPodCompatible": false,
      "PictureAutoCrop": true,
      "PictureBottomCrop": 0,
      "PictureLeftCrop": 0,
      "PictureRightCrop": 0,
      "PictureTopCrop": 0,
      "PictureDARWidth": 240,
      "PictureDeblock": 4,
      "PictureDeinterlaceFilter": "decomb",
      "PictureCombDetectPreset": "default",
      "PictureCombDetectCustom": "",
      "PictureDeinterlacePreset": "default",
      "PictureDenoiseCustom": "",
      "PictureDenoiseFilter": "off",
      "PictureDenoisePreset": "light",
      "PictureDenoiseTune": "none",
      "PictureSharpenCustom": "",
      "PictureSharpenFilter": "off",
      "PictureSharpenPreset": "medium",
      "PictureSharpenTune": "none",
      "PictureDetelecine": "off",
      "PictureDetelecineCustom": "",
      "PictureItuPAR": false,
      "PictureKeepRatio": true,
      "PictureLooseCrop": false,
      "PictureModulus": 2,
      "PicturePAR": "auto",
      "PicturePARWidth": 1,
      "PicturePARHeight": 1,
      "PictureRotate": "0:0",
      "PictureForceHeight": 0,
      "PictureForceWidth": 0,
      "PresetName": "myarchivesd",
      "Type": 1,
      "UsesPictureFilters": false,
      "UsesPictureSettings": 2,
      "SubtitleAddCC": false,
      "SubtitleAddForeignAudioSearch": true,
      "SubtitleAddForeignAudioSubtitle": false,
      "SubtitleBurnBehavior": "foreign",
      "SubtitleBurnBDSub": false,
      "SubtitleBurnDVDSub": false,
      "SubtitleLanguageList": [],
      "SubtitleTrackSelectionBehavior": "none",
      "VideoAvgBitrate": 0,
      "VideoColorMatrixCode": 0,
      "VideoEncoder": "x264",
      "VideoFramerateMode": "vfr",
      "VideoGrayScale": false,
      "VideoHWDecode": false,
      "VideoScaler": "swscale",
      "VideoPreset": "fast",
      "VideoTune": "",
      "VideoProfile": "main",
      "VideoLevel": "4.1",
      "VideoOptionExtra": "",
      "VideoQualityType": 2,
      "VideoQualitySlider": 25.0,
      "VideoQSVDecode": false,
      "VideoQSVAsyncDepth": 4,
      "VideoTwoPass": false,
      "VideoTurboTwoPass": false,
      "x264Option": "level=4.1:vbv-bufsize=62500:vbv-maxrate=50000:rc-lookahead=30:ref=5:bframes=5:b-adapt=2:direct=auto:me=dia:subme=9:merange=15:trellis=0",
      "x264UseAdvancedOptions": true
    }
  ],
  "VersionMajor": "11",
  "VersionMicro": "0",
  "VersionMinor": "0"
}

Até agora, consegui encontrar os argumentos corretos para conversão com o HandbrakeCli. Usando o pré-ajuste eu finetuned com HandbrakeGui (dá perto de qualidade YIFY):

HandBrakeCLI.exe --maxHeight 720 --maxWidth 1280 --preset-import-file "mypreset.json" -Z "mypreset" -i "input.mp4" -o "output.mp4".

Atualização:

Esta é a minha versão atual do arquivo de lote.

  1. Primeiro, você precisa colocar o caminho para seu hanbrakecli.exe e seu preset.json no arquivo de lote abaixo.
  2. Copie o arquivo em lotes para o diretório raiz do seu arquivo de vídeo e clique duas vezes nele.

Observação: tenha cuidado com a extensão .DAT . Copie este lote apenas para uma pasta onde existam apenas arquivos de vídeo, sem dados de aplicativos.

Aqui está o conteúdo do arquivo em lote:

@echo off &setlocal
for /R %%I in (*.DAT *.mpg *.mpeg *.wmv *.3gp *.mov *.avi *.mkv *.mp4) do (
    set "fpath=%%~dpnI"
    set "fname=%%~nI"
    setlocal enabledelayedexpansion
    if exist "%%~dpnI.unfinished.mp4" (
        echo "Found unfinished conversion of %%~nI. Deleting leftover files ..."
        del /F "%%~dpnI.unfinished.mp4"
    )
    if "!fname!"=="!fname:.converted=!" (
        echo "converting %%I ..."
        "[path to HandbrakeCli.exe]" --maxHeight 720 --maxWidth 1280 --preset-import-file "[path to your preset.json]" ^
        -Z "[your preset name]" -i "%%I" -o "%%~dpnI.unfinished.mp4"
        if exist "%%~dpnI.unfinished.mp4" (
            echo "conversion of %%I succeded. deleting the source file..."
            del /F "%%~dpnxI"
            move /Y "%%~dpnI.unfinished.mp4" "%%~dpnI.converted.mp4"
        )else (
            echo "conversion of %%I was not successful. Keeping the source file!"
            if exist "%%~dpnI.unfinished.mp4" (
                del /F "%%~dpnI.unfinished.mp4"
            )
        )
    )else (
        echo "We already have %%I. No need to convert it again!"
    )
)
endlocal
PAUSE

O que isso faz é:

  1. Ele procura por cada arquivo com extensões de filme comuns.
  2. verifica se ele foi convertido com sucesso antes ou não (por meio de um padrão de nomenclatura).
  3. inicia a conversão e coloca o arquivo de saída no diretório do arquivo de entrada (executando o comando hanbrakecli no arquivo)
  4. verifica se há conversão bem-sucedida (por padrão de nomenclatura)
  5. remove o arquivo de entrada.

Meus desafios atuais são: A saída do comando handbrakecli é super detalhada e feia. seria melhor se ele emitisse apenas o progresso de conversão e o tempo restante ou mesmo nenhuma entrada.

É possível canalizar e filtrar a saída do freio de mão ou silenciá-la?

    
por Euphoria 07.07.2018 / 10:59

0 respostas