Команда для поиска и вывода кодеков всех видео в дереве каталогов

У меня есть большая цифровая коллекция фильмов, и я пытался найти способ определить, какие кодеки составляют каждое видео в коллекции, а затем вывести эту информацию в файл вместе с названием фильма.

Я сумел удивить себя прошлой ночью, взломав достаточно разрозненных фрагментов кода, чтобы выполнить это достаточно хорошо:

find . -type f -regextype posix-extended -iregex '.*\.(mkv|webm|mp4|vob|ogg|ogv|avi|mov|wmv|qt|yuv|m4v|m?v|3gp|flv|f4v)' -printf "%f - " \
-exec ffprobe -v fatal -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 {} \; | 
tee  "/video_codecs_short.txt"

Эта команда может найти все фильмы в дереве каталогов (в том числе с расширениями не в нижнем регистре), и для каждого из них выводит следующее как в STDOUT, так и в текстовый файл:

Название моего фильма - h264

Это более или менее делает то, что я хотел, но, как вы могли заметить, это не слишком умно. -printf опция - это обходной путь, который ограничивает меня использованием аргумента имени файла, возвращаемого из find, к которому выводится из ffprobe затем добавляется.

Это означает, что я не могу напрямую манипулировать выводом из ffprobe с помощью этой команды, и мешает мне создавать более сложные выходные шаблоны, такие как:

Название моего фильма (h264)

...или даже:

(h264) Название моего фильма

Как я могу уточнить эту команду, чтобы я мог получить вывод из -exec ffprobe в качестве параметра так же, как вывод find?

Любые общие советы о том, как я могу сделать команду более чистой / более эффективной / пуленепробиваемой, также приветствуются.

0 ответов

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