Как найти мультимедийные файлы, не закодированные с помощью определенного кодека?

Я хотел бы стандартизировать свою коллекцию видео на конкретном видеокодеке (например, кодек с высокой эффективностью x265). Я знаю, что могу получить кодек, используемый в одном файле, например, «mediainfo filename | grep «Идентификатор кодека», который выведет видеокодек, за которым следует аудиокодек для каждого файла, например:

Codec ID                                 : V_VP8
Codec ID                                 : A_VORBIS

Я просмотрел man find, но я не могу понять, как выполните это. Любые идеи?

1
задан 3 June 2016 в 19:36

2 ответа

Вы можете использовать этот небольшой скрипт python вместе с find для печати всех файлов с определенным кодеком:

filterByCodec.py

import os
import sys
import json

inputPath = sys.argv[1]
codec = sys.argv[2]
type = sys.argv[3]

cmd = 'ffprobe -v quiet -show_streams -print_format json ' + inputPath
output = os.popen(cmd).read()
output = json.loads(output)

if not 'streams' in output:
    sys.exit(0)
for stream in output['streams']:
    if stream['codec_name'] == codec and stream['codec_type'] == type:
        print inputPath
        sys.exit(0)

Это вызовет ffprobe, сохранит его вывод в строке json, итерацию по всем потокам и печать входного пути в случае, если имя и тип кодека совпадают. Для этого вам понадобится ffprobe.

Затем вы можете вызвать его в каждом файле с помощью find следующим образом:

find . -type f -exec python filterByCodec.py {} hevc video \;

это будет печатать все видео, содержащие видеокодек HEVC. Дополнительные примеры:

find . -type f -exec python filterByCodec.py {} h264 video \;
find . -type f -exec python filterByCodec.py {} mp3 audio \; 

Вы можете расширить скрипт и переместить эти файлы в какую-либо директорию или что-то еще. Это может выглядеть примерно так:

cmd = 'mv ' + inputPath + ' onlyhevcDir'
os.system(cmd)

Я знаю, что это не лучший способ сделать это, но с помощью python это довольно просто сделать.

2
ответ дан 23 May 2018 в 10:26
  • 1
    Где python ожидает найти скрипт? Я получаю python: can't open file 'filterByCodec.py': [Errno 2] No such file or directory – Elder Geek 5 June 2016 в 16:38
  • 2
    @ElderGeek в том же каталоге, где вы запустили find. Но вы можете скопировать его либо в / usr / local / bin, либо в путь экспорта, чтобы разрешить доступ к нему со всех сторон – incBrain 5 June 2016 в 16:42
  • 3
    Спасибо stackoverflow.com/questions/23915661/… объясняет это. – Elder Geek 5 June 2016 в 16:43
  • 4
    Я получил его, указав полный путь к скрипту. по какой-то причине просто наличие его на пути или в / usr / local / bin не сработало для меня. – Elder Geek 5 June 2016 в 17:05
  • 5
    @ElderGeek Мне жаль, что мой предыдущий комментарий - полная фигня, поместив его на ваш путь, нельзя сказать python, где найти скрипт (так как его не исполняемый файл, который мы ищем, его просто скрипт), поэтому предоставление полного абсолютного путь к сценарию, как вы делали, - лучший способ сделать это, я думаю. – incBrain 5 June 2016 в 17:23

Вы можете получить отсортированный список ваших медиафайлов вашего кодека в рабочем каталоге

$ mediainfo * | grep -v codec_id | grep .file_extension | cut -f2 -d:> list.txt

, где codec_id - рассматриваемый кодек (например, h264).

, но если имена файлов имеют пробелы между именами, тогда команда «mv 'mediainfo * | grep -v codec_id | grep .file_extension | cut -f2 -d:' -t Destination» не будет работать по желанию.

0
ответ дан 23 May 2018 в 10:26

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

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