Видео вида скоростью передачи

У меня есть папка приблизительно с 300 видео. Я хочу отсортировать их по их видео скорости передачи. Я использую команду 'mediainfo' для получения информации о скорости передачи файла. Действительно ли возможно записать сценарий (возможно в Python) для сортировки этих видео с помощью этой команды. Я не знаю много о сценариях, поэтому объясните :).Thanks заранее.

1
задан 12 October 2014 в 12:03

4 ответа

Я быстро сделал сценарий Python, который называет процесс mediainfo для каждого файла в критерии поиска и виды затем критериями сортировки и распечатывает результаты. Измените для своих собственных потребностей.

Это использует чистую строковую сортировку для значений. Вы могли также добавить reverse=True для отсортированного метода, если требуется или делают то, что Вы хотите с кодом иначе. Этот сценарий требует, чтобы Вы передали споры с 'вокруг них. Аргументом критериев сортировки может быть любое значение, которое mediainfo возвращает из файлов.

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])
1
ответ дан 10 November 2019 в 19:21

Можно найти полезным проверить этот поток .

Вот быстрая сводка, как предложено в комментариях:

1) наутилус Python установки и мутаген Python с sudo apt-get install python-nautilus python-mutagen

2) Набор Ваша переменная PYTHONPATH путем следования инструкциям здесь .

3) Создают каталог, названный расширениями Python в ~/.nautilus

4), Загрузка этот сценарий Python, и вставьте его в ~/.nautilus/python-extensions

5) наутилус Перезапуска с $ nautilus -q && nautilus &

, я все еще рекомендую прочитать поток хотя, существует большая полезная информация там.

1
ответ дан 10 November 2019 в 19:21

Как я упомянул в своем комментарии, mediainfo команда действительно, действительно замедлитесь. Существуют лучшие альтернативы, я думаю.

Однако вот моя версия сценария Python, который должен сделать задание (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])

Это создает вывод, будучи похож:

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

Примечание:

если существует риск нечитабельных файлов, "попытка / кроме" должна быть встроена в сценарий, для передачи в тех случаях.

Как использовать:

Как с любым сценарием, скопируйте сценарий в пустой файл, установите путь в файлы в заголовке сценария, сохраните его как sort_video.py и выполненный это командой:

python3 /path/to/sort_video.py
1
ответ дан 10 November 2019 в 19:21

Используя команду mediainfo и sort я могу отсортировать около 100+ видео менее чем за 10 секунд:

mediainfo --Inform="General;%OverallBitRate% | %CompleteName% (%OverallBitRate/String%)\n" * | sort -n

Тем не менее, он сортирует видео по глобальному битрейту видеофайла, а не только по битрейту видеопотока.

Пример вывода

1091318 | videoA.mkv (1 091 kb/s)
1505121 | videoB.mkv (1 505 kb/s)
8803070 | videoD.mkv (8 803 kb/s)
11192962 | videoC.mkv (11.2 Mb/s)

Как это работает

Запуск mediainfo с шаблоном через параметр Inform просим печатать сначала OverallBitRate только с числовыми символами .

Просим искать все файлы папки рекурсивно соответствующие *.

Затем мы передаем весь результат в команду sort с параметрами -n, указывающими, что мы сортируем числовые значения.

Поскольку последний символ %OverallBitRate% не является числовым (пробел не является числовым символом), sort -n будет учитывать только первые числовые символы. Это означает, что sort -n с просмотром цифр перед разделением |, которое разделяет общую скорость передачи данных и имя файла.

Примечания

Каждая строка, mediainfo, похоже, ограничена только одним разделом с использованием параметров --Inform. Таким образом, если имя файла будет напечатано, вы можете получить только общий битрейт вместо битрейта (что очень близко), поскольку битрейт находится в разделе видео , а общий битрейт , однако в разделе Общие как имя файла.

Разница в том, что OverallBitRate также содержит битрейт аудио вдоль видео.

Как видно, это не совсем скрипт python: mediainfo сама по себе может сделать большую часть работы, делая скрипт python ненужным.

0
ответ дан 20 December 2020 в 21:21

Другие вопросы по тегам:

Похожие вопросы: