У меня есть видеоархив личных воспоминаний, организованных во множество папок. Видеофайлы имеют несколько типов файлов, и соотношение качества к размеру ужасно (некоторые даже 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".
Обновить:
Это моя текущая версия командного файла.
- Сначала вам нужно указать путь к вашему
hanbrakecli.exe
и файлуpreset.json
в командном файле ниже. - Затем скопируйте пакетный файл в корневой каталог вашего видеоархива и дважды щелкните по нему.
Примечание: будьте осторожны .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
Что это делает:
- Он ищет каждый файл с общими расширениями фильма.
- проверяет, успешно ли он преобразовал его раньше или нет (с помощью шаблона именования).
- начинает преобразование и помещение выходного файла в каталог входных файлов (с помощью команды hanbrakecli)
- проверяет успешное преобразование (по шаблону именования)
- удаляет входной файл
Мои текущие проблемы: Вывод команды handbrakecli очень многословен и безобразен. было бы лучше, если бы он выводил только прогресс конвертации и оставшееся время или вообще не вводил.
Возможно ли передать и отфильтровать выходной сигнал ручного тормоза или заставить его замолчать?