Como posso converter todos os arquivos de vídeo em pastas aninhadas? (conversão em lote)

3

Eu tenho muitos arquivos de vídeo grandes dos meus filhos (formato .MTS). Agora eu gostaria de convertê-los em divx / xvid para economizar espaço em disco rígido e também ter a capacidade de assistir no meu televisor.

Os arquivos de vídeo são armazenados em pastas aninhadas no meu disco rígido (com base em horários de filmagem ou eventos especiais). Então, mantendo a estrutura de pastas existente, eu gostaria de converter todos os vídeos (o que pode levar alguns dias, creio) automaticamente.

Eu apreciarei se você puder me guiar como alcançá-lo?

    
por Tolga 03.03.2018 / 16:42

1 resposta

2

Você pode usar ffmpeg para converter formatos de vídeo. Se ainda não estiver instalado, use-o usando:

sudo apt install ffmpeg

Eu tentei com sucesso o seguinte comando para converter um vídeo de exemplo em um formato DivX 5.0 baseado em AVI:

ffmpeg -i sample.mp4 -f avi -vtag DX50 sample.divx

Primeiro, você especifica o arquivo de vídeo de entrada como, por exemplo, -i Videos/sample.mts , então dizemos que queremos que o formato de saída seja AVI com uma tag DivX 5.0 usando -f avi -vtag: DX50 . O último argumento é o arquivo de saída para gerar, aqui Videos/sample.divx .

Eu recomendo que você tente primeiro um pequeno vídeo e verifique se tudo funcionou como esperado e se o formato é reconhecido pelo seu player, bem como se a qualidade do vídeo e o tamanho do arquivo estão bem. Você pode ajustar o último com um argumento adicional -q:v N , onde N é um número e números menores significam maior qualidade e tamanho de arquivo. Bons valores estão provavelmente no intervalo 2-8, talvez tente 5:

ffmpeg -i sample.mp4 -f avi -vtag DX50 -q:v 5 sample.divx

Depois que o teste for bem-sucedido e o formato e a qualidade estiverem corretos, você poderá converter todos os seus arquivos de vídeo .mts em lote em um diretório de origem específico de forma recursiva com um script Bash como este:

#!/bin/bash

# Change the directories and quality level (lower=better) below accordingly:
inputfolder="/path/to/somewhere"
outputfolder="/path/to/elsewhere"
videoquality=5

shopt -s globstar nocaseglob nocasematch  # enable ** and globs case-insensitivity

for inputfile in "$inputfolder"/**/*.mts ; do
    outputfile="$outputfolder/$(basename "${inputfile%.mts}").divx"
    ffmpeg -i "$inputfile" -f avi -vtag DX50 -q:v "$videoquality" "$outputfile"
done

Ou se você quiser os arquivos de saída no mesmo diretório da entrada, veja uma versão mais curta:

#!/bin/bash

# Change the directory and quality level (lower=better) below accordingly:
folder="/path/to/somewhere"
videoquality=5

shopt -s globstar nocaseglob nocasematch  # enable ** and globs case-insensitivity

for inputfile in "$folder"/**/*.mts ; do
    ffmpeg -i "$inputfile" -f avi -vtag DX50 -q:v "$videoquality" "${inputfile%.mts}.divx"
done
    
por Byte Commander 03.03.2018 / 17:39