穷人用手制动批量编码


我希望有一种方法可以批量编码一个目录(甚至是多个目录)的文件,而不必使用手制动接口来排队每个目录。理想情况下,我会在。但是现在,这里有一个简单的方法来遍历所有的目录,并用相同的手制动设置来编码所有的文件。

它是如何工作的

  1. 删除任何名为“_encode_info.log”和“_encode_progress.log”的现有文件
  2. 获取它运行的目录和子目录中的所有文件,忽略自身
  3. 对于它找到的每个文件:
    1. 它获取文件所在目录的名称,并在“destinationPathRoot”下创建一个同名目录。
    2. 将输出文件的名称设置在“目标路径根”下新创建的目录下
    3. 如果文件已经存在,它会将其名称设置为当前日期和时间(以避免覆盖)
    4. 用源文件路径和目标文件路径调用EncodeVideo函数
    5. 如果编码后目标文件路径存在,它将删除源文件路径

设置

  • 手刹可执行文件–设置手刹可执行文件的路径
  • 目标路径根–放置编码文件的路径根

如何使用它

复制下面的内容并粘贴到. bat文件中。我根据我使用的手刹参数来命名我的名字。例如“_encode-Q25-1Audio,bat”(意思是在1个音频流中使用25的可变质量)。复制。bat文件位于视频所在目录的根目录下。运行它。

密码

@echo off
cls
setlocal enabledelayedexpansion enableextensions

rem Set the path to the Handbrake executable
set handBrakeExecutable=Path\To\HandBrakeCLI.exe

rem Set the root path where files will be encoded to
set destinationPathRoot=Path\To\Done\Videos

if exist "%CD%\_encode_info.log" del "%CD%\_encode_info.log"
if exist "%CD%\_encode_progress.log" del "%CD%\_encode_progress.log"

rem Get all the files in the directory and sub-directories
for /f "tokens=* delims=|" %%G in ('dir /s /a-d /b *.*') do if not %%~xG==.bat (
 rem Set the source file path
 set sourceFilePath=%%G

 rem Get the current directory and remove the trialing slash
 set currentDirectory=%%~dpG
 set currentDirectoryNoTrailingSlash=!currentDirectory:~0,-1!

 rem Get only the name of the current directory
 for %%f in (!currentDirectoryNoTrailingSlash!) do set currentDirectoryName=%%~nxf

 rem Create the path to the destantion path based on the current directory name
 set destinationPath=!destinationPathRoot!\!currentDirectoryName!

 rem if the destination doesn't exist, create it
 if not exist !destinationPath! (
 mkdir !destinationPath!
 )

 rem Process the file
 echo File: %%G

 rem Set the destination file based on the destination path and the current file name
 set destinationFilePath=!destinationPath!\%%~nG.mp4

 rem If the filename already exists, append the current date and time to it
 if exist destinationFilePath (
 rem Get the current date and time in MMDDYY_HH_MM_SS format
 for /f "tokens=1-8 delims=:./ " %%G in ("%date%_%time%") do (
 set currentDateTime=%%G%%H%%I_%%J_%%K
 )

 set destinationFilePath=!destinationPath!\%%~nG-!currentDateTime!.mp4
 )

 rem Call Handbrake to encode the file
 call :EncodeFile "!sourceFilePath!", "!destinationFilePath!"

 rem Delete the source file if the destination exists
 if exist !destinationFilePath! (
 del "!sourceFilePath!"
 )
)

:EncodeFile
setlocal

rem echo Source: %~1
rem echo Destination: %~2

rem Call HandBrakeCLI to encode the file
"!handBrakeExecutable!" ^
-I "%~1" ^
-o "%~2" ^
-f mp4 ^
-O ^
--decomb="fast" ^
--crop 0:0:0:0 ^
--strict-anamorphic ^
--modulus 2 ^
-e x264 ^
-q 25.0 ^
--cfr ^
-a 1 ^
--encoder-level="4.0" ^
--encoder-profile=high ^
1> _encode_progress.log ^
2> _encode_info.log

endlocal