У меня есть видеоархив личных воспоминаний, организованных во множество папок. Видеофайлы имеют несколько типов файлов, и соотношение качества к размеру ужасно (некоторые даже 20 Мбит / с для видео 720p.

Я хочу преобразовать каждое видео в формат 720p и заменить его преобразованным файлом, но только если преобразование прошло успешно.

Вот мой пресет Handbrake, экспортированный в 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"
}

До сих пор мне удалось найти правильные аргументы для преобразования с HandbrakeCli. Используя пресет, который я настроил с помощью HandbrakeGui (дает качество почти YIFY):

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

Обновить:

Это моя текущая версия командного файла.

  1. Сначала вам нужно указать путь к вашему hanbrakecli.exe и файлу preset.json в командном файле ниже.
  2. Затем скопируйте пакетный файл в корневой каталог вашего видеоархива и дважды щелкните по нему.

Примечание: будьте осторожны .DAT . только скопируйте этот пакет в папку, где есть только видеофайлы, но нет данных приложения.

Вот содержимое пакетного файла:

@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

Что это делает:

  1. Он ищет каждый файл с общими расширениями фильма.
  2. проверяет, успешно ли он преобразовал его раньше или нет (с помощью шаблона именования).
  3. начинает преобразование и помещение выходного файла в каталог входных файлов (с помощью команды hanbrakecli)
  4. проверяет успешное преобразование (по шаблону именования)
  5. удаляет входной файл

Мои текущие проблемы: Вывод команды handbrakecli очень многословен и безобразен. было бы лучше, если бы он выводил только прогресс конвертации и оставшееся время или вообще не вводил.

Возможно ли передать и отфильтровать выходной сигнал ручного тормоза или заставить его замолчать?

0