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.
hanbrakecli.exe
e seu
preset.json
no arquivo de lote abaixo. 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 é:
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?