Classificar vídeos por taxa de bits

1

Eu tenho uma pasta com cerca de 300 vídeos. Eu quero classificá-los por sua taxa de bits de vídeo. Eu uso um comando 'mediainfo' para obter as informações de taxa de bits de um arquivo. É possível escrever um script (possivelmente em python) para classificar esses vídeos usando este comando. Eu não sei muito sobre scripts, então, por favor, explique :). Obrigado antecipadamente.

    
por Akheel K M 12.10.2014 / 10:03

3 respostas

1

Eu rapidamente criei um script python que chama o processo mediainfo para cada arquivo em um critério de pesquisa e ordena os mesmos, classificando os critérios e imprimindo os resultados. Modifique para suas próprias necessidades.

Isso usa a classificação pura de string para os valores. Você também pode adicionar reverse=True para o método classificado, se desejar, ou fazer o que quiser com o código. Este script exige que você passe argumentos com 'ao redor deles. O argumento de critérios de classificação pode ser qualquer valor que o mediainfo retorne dos arquivos.

import os, sys, glob
import pprint

# Call: python mediainfo_sort.py 'search_criteria' 'sort_criteria'
# Call example: python mediainfo_sort.py '*.avi' 'Bit rate'

files = glob.glob(sys.argv[1])
criteria = sys.argv[2]

# Will have data in format: {'file_path': {'Media Attribute', 'Value'}}
file_datas = {}

# Contruct data by calling mediainfo for all files in 
for file_path in files:
    mediainfo = os.popen('mediainfo "%s"' % file_path).read()
    file_data = {}
    infos = mediainfo.splitlines()
    for info in infos:
        if ':' in info:
            info_split = info.split(':')
            file_data[info_split[0].strip()] = info_split[1].strip()
        file_datas[file_path] = file_data

# function for sorted, uses Media attribute (sort_criteria) value as sorting key
def getKey(item):
    return item[1][criteria]

sorted_files = sorted(file_datas.items(), key=getKey)

# In the end just join the keys (filenames) with newline and print
print '\n'.join([x[0] for x in sorted_files])
    
por Ahti Komu 12.10.2014 / 11:56
1

Você pode achar útil verificar o este tópico .

Aqui está um breve resumo, como sugerido nos comentários:

1) instale python-nautilus e python-mutagen com sudo apt-get install python-nautilus python-mutagen

2) Defina sua variável PYTHONPATH seguindo as instruções aqui .

3) Crie um diretório chamado python-extensions em ~ / .nautilus

4) Faça o download do este script python e cole-o em ~ / .nautilus / python- extensões

5) Reinicie o nautilus com $ nautilus -q && nautilus &

Ainda assim, recomendo a leitura do tópico, há muitas informações úteis.

    
por jessenorton 12.10.2014 / 10:24
1

Como mencionei no meu comentário, o comando mediainfo é muito, muito lento. Existem alternativas melhores, eu acho.

Dito isto, aqui está a minha versão de um script python, que deve fazer o trabalho (python3):

#!/usr/bin/env python3

import os
import subprocess

directory = "/path/to/files"

# list the files in the directory
files_tosort = os.listdir(directory)

filedata = []
for file in files_tosort:
    # combine filepath and file, take care of the whitespaces
    filepath = directory+"/"+file; command = "mediainfo "+"'"+filepath+"'"
    # get the file's data
    data = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
    # extract the bitrate from the output
    bitrate = [line[line.find(":")+2:].replace("Kbps", "").replace(" ", "") \
               for line in data.splitlines() if "Bit rate" in line][0]
    # add the found bitrate+filename to he list
    filedata.append((int(bitrate), file))

# sort the list by the bitrate
filedata.sort(key=lambda item: item[0])
# print out
for item in filedata:
    print("bitrate: "+str(item[0])+" Kbps\t file: "+item[1])

Cria uma saída, parecida com:

bitrate: 606 Kbps    file: film1.avi
bitrate: 731 Kbps    file: film10.avi
bitrate: 790 Kbps    file: film4.avi
bitrate: 802 Kbps    file: film3.avi
bitrate: 845 Kbps    file: film6.avi
bitrate: 919 Kbps    file: film7.avi
bitrate: 984 Kbps    file: film5.avi
bitrate: 1023 Kbps   file: film2.avi
bitrate: 1088 Kbps   file: film8.avi

Nota:

se houver o risco de arquivos ilegíveis, um "try / except" deve ser incorporado ao script para passar nesses casos.

Como usar:

Como em qualquer script, copie o script em um arquivo vazio, defina o caminho para os arquivos na cabeça do script, salve-o como sort_video.py e execute-o pelo comando:

python3 /path/to/sort_video.py
    
por Jacob Vlijm 12.10.2014 / 20:58