web-dev-qa-db-ja.com

CLI支援によるハンドブレーキバッチ変換

GUIツールを使用すると常にクラッシュするので、ファイルを必要に応じて変換するコマンドを考え出しました。 GUIで作成したプリセットを取得し、ファイルを変換します。

変換する必要のあるビデオがたくさんあります。フォルダ内のすべての.MOVビデオを読み取り、提供したコマンドを使用してそれらを.mp4に変換するスクリプトを使用して、バッチ変換が可能かどうかを知りたいです。

私はWindows10を実行しています。

これが私のコマンドです。私はナイトリービルドを使用しています。

HandBrakeCLI.exe --preset-import-file "preset-name.json" -Z "preset-name" -i video.MOV -o video.mp4

より明確なリクエストで編集。

1
JK81

OK、あなたは次のようなファイルをたくさん持っていると思います

_ant.mov
bug.mov
cat.mov
dog.mov
   ︙
_

ディレクトリ(別名フォルダ)にあり、実行したい

HandBrakeCLI.exe (何とか何とか何とか)  -i ant.MOV -o ant.mp4 
 HandBrakeCLI.exe……-ibug.MOV -o bug.mp4 
 HandBrakeCLI.exe……-icat.MOV -o cat.mp4 
 HandBrakeCLI.exe……-idog.MOV -o dog.mp4 
︙

すべての_*.mov_ファイル用。これはかなり簡単です。

(* .mov)の%Fの場合、HandBrakeCLI.exeを実行します (何とか何とか何とか)  -i "%F" -o "%〜nF.mp4"

for %F in (*.mov)は、_%F_が該当するすべての_*.mov_名を引き継ぐループを実行します。次に、doに続くコマンドがファイルごとに実行され、_%F_は明らかに_.mov_ファイル名に置き換えられます。 (注:Fでは大文字と小文字が区別されます。)(引用符なしで処理できる場合があります。つまり、just _%F_であり、_"%F"_ではありません—ただし、スペースやその他の特殊文字を含むファイル名がある場合は失敗します。)_%~nF_は置き換えられますnファイル名の同じ部分(拡張子を含まない)であるため、_%~nF.mp4_が出力ファイル名になります。

実際のコマンドが非常に長いため、および/またはループ内で他のことを実行したい場合は、これを複数の行に分割することをお勧めします。これは括弧を使用して行うことができます。

(* .mov)の%Fの場合do(
 HandBrakeCLI.exe (何とか何とか何とか)  -i "%F" -o "%〜nF.mp4" 
 (機能する他のコマンド "%F"、 "%〜nF"、 等。)

_for /?_と入力すると、すべての_~_コードのリストが表示されます。 (たとえば、_%~dF_はドライブ文字を示し、_%~pF_はパスを示します。ドキュメントでは、修飾子を組み合わせることができるという事実について明確ではありません。たとえば、_%~dpnF_はドライブ、パス、名前ですが、拡張子はありません— _%~dF%~pF%~nF_と入力したかのように。)

_^_を使用して、長いコマンドを複数の行に分割することもできます。

for%F in(* .mov)do(
 HandBrakeCLI.exe --preset-import-file "preset-name.json" ^ 
-Z "preset-name" -i "% F "-o"%〜nF.mp4 "
 (機能する他のコマンド "%F"、 "%〜nF"、 等。)

上記のすべては、コマンドプロンプト(コマンドライン)で機能します。各_%_を_%%_に置き換える必要があることを除いて、同じことがバッチスクリプトでも機能します。

for %% F in(* .mov)do(
 HandBrakeCLI.exe --preset-import-file "preset-name.json" ^ 
-Z "preset-name" -i " %% F "-o" %% 〜nF.mp4 "
 (機能する他のコマンド "%% F"、 "%% 〜nF"、 等。)

これはWindows7でテストされていますが、Windows10で機能しなかった場合は非常に驚きます。

1
Scott

同じファイルタイプを生のmkvファイル(MakeMKV rip)から圧縮されたmkvファイルに変換する場合に備えて、これに少し追加したいと思います。上記のコードは、あるファイルを調べてから別のファイルに変換するのに最適です。私が見つけた他のコードも同様で、彼らのサイトからコピーしています。

FOR /F "tokens=*" %%G IN ('DIR /B /S *.avi') DO "C:\Program Files\Handbrake\HandBrakeCLI" -i "%%G" -o "%%G".mp4 --preset="iPad"

しかし、これは.mkv->。mkvを変換するときに役に立ちませんでした。試行錯誤の結果、ディレクトリコマンドの/Sを削除して、ファイル名のみを記録し、%%Gへのパス全体を記録しないようにする必要があることがわかりました。

これは、ユーザープロファイルをプルし、エンコードを別のフォルダーに送信するために使用しているコードです。

FOR /F "tokens=*" %%G IN ('DIR /B *.mkv') DO "C:\Program Files\Handbrake\HandBrakeCLI" --preset-import-gui -Z "name of user preset" -i "%%G" -o "D:\Users\jeff\Videos\Path\To\File\%%G"
pause

注意事項:

  1. プリセットの名前は、自分のものであろうと組み込みのものであろうと、大文字と小文字が区別されます。
  2. 組み込みのプリセットを使用する場合は、コードに--preset-import-guiを含める必要はありません。
  3. -iのように、変数の後に-i "%%G"の後に引用符が含まれていることを確認してください。これにより、上記のコメンターとして、名前にスペースが含まれるファイルをエラーなしで使用できるようになります。

必要なコードをテキストファイルにコピーしてから、変換するムービーのディレクトリに.batファイルとしてファイルを保存します。

これにより、異なる名前の多数のファイルを一度に変換する際の時間を節約できることを願っています。

0
Timbuckto