Команда для поиска и вывода кодеков всех видео в дереве каталогов
У меня есть большая цифровая коллекция фильмов, и я пытался найти способ определить, какие кодеки составляют каждое видео в коллекции, а затем вывести эту информацию в файл вместе с названием фильма.
Я сумел удивить себя прошлой ночью, взломав достаточно разрозненных фрагментов кода, чтобы выполнить это достаточно хорошо:
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
?
Любые общие советы о том, как я могу сделать команду более чистой / более эффективной / пуленепробиваемой, также приветствуются.