Encontre todos os arquivos de vídeo com uma duração em um determinado intervalo da linha de comando

0

Como posso encontrar todos os arquivos de vídeo de forma que a duração esteja em um intervalo específico.

Por exemplo, encontre todos os arquivos de vídeo com duração entre 20 e 40 minutos.

    
por student 08.07.2017 / 10:05

1 resposta

2

O script a seguir fará o trabalho para você. Ele presume que os vídeos estão em um diretório (não em todo o sistema).

O script também pressupõe que você tenha avprobe installed, que faz parte de avconv . Deve ser a mesma sintaxe de ffprobe (parte de ffmpeg ) se você tiver isso. Se a saída de ffprobe for diferente, o script precisará ser editado.

A duração é necessária em segundos, no entanto - as salvações fazem um cálculo.

#!/bin/sh

# NOTE: Assumes you have avprobe installed and the full path
# to it is /usr/bin/avprobe - if not, edit.

# Where are the videos?
MASTER="/home/tigger/Videos"
# Duration min in seconds (1200 = 20min)
DUR_MIN="1200"
# Duration max in seconds (2400 = 40min)
DUR_MAX="2400"

# Get a list of files
LIST='find "$MASTER" -type f'

# In case of a space in file names, split on return
IFS_ORIG=$IFS
IFS="
"

valid="\nList of videos with duration between $DUR_MIN and $DUR_MAX seconds"

# Loop over the file list and probe each file.
for v in $LIST
do
    printf "Checking ${v}\n"
    dur='/usr/bin/avprobe -v error -show_format_entry duration "${v}"'
    if [ -n $dur ]
    then
        # Convert the float to int
        dur=${dur%.*}
        if [ $dur -ge $DUR_MIN -a $dur -le $DUR_MAX ]
        then
            valid="${valid}\n$v"
        fi
    fi
done

printf "${valid}\n"
exit
    
por 08.07.2017 / 11:19