Conversão em lote do Handbrake com assistência do CLI

0

Usando a ferramenta GUI SEMPRE falha para mim, então eu criei um comando para converter meus arquivos para as minhas necessidades. É preciso uma predefinição que criei na GUI e converta o arquivo.

Tenho muitos vídeos que preciso converter e gostaria de saber se é possível converter em lote usando algum tipo de script que leia todos os vídeos .MOV em uma pasta e os converta em .mp4 usando o comando que forneci. .

Estou executando o Windows 10.

Aqui está o meu comando, estou usando construções noturnas:

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

Editado com um pedido mais claro.

    
por JK81 25.10.2017 / 03:23

2 respostas

0

OK, eu acho que você tem um monte de arquivos como

ant.mov
bug.mov
cat.mov
dog.mov
   ︙

em um diretório (pasta a.k.a), e você quer fazer

HandBrakeCLI.exe  (blah blah blah)  -i ant.MOV -o ant.mp4
HandBrakeCLI.exe       …    …       -i bug.MOV -o bug.mp4
HandBrakeCLI.exe       …    …       -i cat.MOV -o cat.mp4
HandBrakeCLI.exe       …    …       -i dog.MOV -o dog.mp4
                         ︙

para todos os arquivos *.mov . Isso é bastante simples:

for %F in (*.mov) do HandBrakeCLI.exe  (blah blah blah)  -i "%F" -o "%~nF.mp4"

O for %F in (*.mov) executa um loop em que %F assume cada nome *.mov aplicável. Então o comando seguindo o do é executado para cada arquivo, com %F obviamente sendo substituído pelo nome do arquivo .mov . (Nota: o F faz distinção entre maiúsculas e minúsculas). (Você pode ser capaz de passar sem as aspas - ou seja, apenas %F e não "%F" - mas então ele falhará se você tiver qualquer nome de arquivo com espaço (s) ou outros caracteres especiais.) %~nF é substituído pela parte n do nome do arquivo (não incluindo a extensão), então %~nF.mp4 se torna o nome do arquivo de saída.

Você pode dividir isso em várias linhas, porque o seu comando atual é tão longo e / ou porque você quer fazer outras coisas no loop. Você pode fazer isso com parênteses:

for %F in (*.mov) do (
    HandBrakeCLI.exe  (blah blah blah)  -i "%F" -o "%~nF.mp4"
    (other command(s) featuring "%F", "%~nF", etc.)
)

Digite for /? para ver uma lista de todos os códigos ~ . (Por exemplo, %~dF fornece a letra da unidade e %~pF fornece o caminho. A documentação não é clara sobre o fato que você pode combinar os modificadores; Por exemplo, %~dpnF fornece a unidade, o caminho e o nome. mas não a extensão - como se você tivesse digitado %~dF%~pF%~nF .)

Você também pode dividir comandos longos em várias linhas com ^ :

for %F in (*.mov) do (
    HandBrakeCLI.exe --preset-import-file "preset-name.json" ^
                      -Z "preset-name" -i "%F" -o "%~nF.mp4"
   (other command(s) featuring "%F", "%~nF", etc.)
)

Todos os itens acima funcionam no Prompt de Comando (linha de comando). A mesma coisa funciona em um script em lote, exceto que você deve substituir cada % por %% :

for %%F in (*.mov) do (
    HandBrakeCLI.exe --preset-import-file "preset-name.json" ^
                      -Z "preset-name" -i "%%F" -o "%%~nF.mp4"
   (other command(s) featuring "%%F", "%%~nF", etc.)
)

Isso é testado no Windows7, mas ficaria muito surpreso se não funcionasse no Windows10.

    
por 02.11.2017 / 21:54
0

Eu gostaria de acrescentar um pouco a isso caso você esteja convertendo o mesmo tipo de arquivo de um arquivo mkv bruto (MakeMKV rip) para um arquivo mkv compactado. O código acima é ótimo para ver um arquivo e depois converter para outro. Outro código que encontrei foi semelhante e estou copiando de seu site:

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

No entanto, isso não ajudou na conversão de .mkv - > .mkv Eu encontrei através de tentativa e erro que você precisa remover o /S no comando de diretório para que ele registre apenas o nome do arquivo e não o caminho completo para %%G .

Aqui está o código que estou usando para extrair um perfil de usuário e também enviar o código para uma pasta diferente:

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

Coisas a serem observadas:

  1. O nome da predefinição é sensível a maiúsculas, seja ela sua ou incorporada.
  2. Se você usar uma predefinição interna, não será necessário ter --preset-import-gui no código
  3. Verifique se a variável tem aspas após o -i , assim como -i "%%G" . Isso, como um comenter declarado acima, permite que arquivos com espaços no nome sejam usados sem erros.

Copie o código que você precisa em um arquivo de texto e salve o arquivo como um arquivo .bat no diretório dos filmes que deseja converter.

Espero que isso ajude você a economizar tempo ao converter muitos arquivos de uma só vez com nomes diferentes.

    
por 05.12.2017 / 08:23

Tags