Я хотел бы стандартизировать свою коллекцию видео на конкретном видеокодеке (например, кодек с высокой эффективностью x265). Я знаю, что могу получить кодек, используемый в одном файле, например, «mediainfo filename | grep «Идентификатор кодека», который выведет видеокодек, за которым следует аудиокодек для каждого файла, например:
Codec ID : V_VP8
Codec ID : A_VORBIS
Я просмотрел man find, но я не могу понять, как выполните это. Любые идеи?
Вы можете использовать этот небольшой скрипт 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 это довольно просто сделать.
Вы можете получить отсортированный список ваших медиафайлов вашего кодека в рабочем каталоге
$ 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» не будет работать по желанию.