Когда вы в очередной раз хотите что-нибудь зарелизить на трекер, перед вами непременно встает проблема оформления раздачи, т. к. по-моему на всех трекерах администрация требует, как минимум, добавить в описание раздачи информацию о файле и серию скриншотов из выкладываемого видеофайла.
Если вы очень редко релизите что-либо на трекер, то в таком случае можно вручную наделать скриншотов, посмотреть в своем любимом плеере информацию о видеофайле во время его проигрывания и переписать ее в форму создания раздачи на трекере.
Если же вы создаете раздачи довольно часто, как, например, это делаю я, то, скорее всего, у вас возникнет мысль о том, что неплохо было бы этот процесс хотя бы немного автоматизировать. Я попробовал задаться такой целью. Вот что из этого вышло.
1. Создание серии скриншотов из видеофайла
При всех моих стараниях, прочесывая Интернет, мне удалось найти только одну программу, которая позволяла бы это сделать (если вы знаете другие программы подобного рода - отпишитесь, буду благодарен), хотя с того момента прошло довольно много времени, так что, возможно, уже появились аналоги.
А называется найденная мной программа QFrameCatcher. Написана она на Qt, так что поклонникам GTK в этот раз не повезло. :)
К моей огромной радости, она умеет все, что мне от нее могло бы понадобиться - настройка количества захватываемых кадров, их размер, возможность сохранить каждый кадр в отдельный файл, или все кадры разместить в одном графическом файле, задав количество строк и столбцов. Единственный недостаток, который я бы мог по отношению к ней назвать - это то, что с ней никак нельзя работать из консоли.
Во всем остальном я ей очень доволен. Так что, если не брезгуете Qt приложениями, бегом на сайт производителя.
2. Получение информации о видеофайле
Когда я приступил к поиску программы для решения данной задачи, я подумал: "Ну уж тут то проблем точно не должно быть. Раз уж нашел программу, которая умеет делать скриншоты видеофайлов, то уж найти программу для отображения информации о них не составит труда." Естественно, я ошибся. :) Поиск не дал вообще никаких результатов. Тогда я пошел на форумы.
Поначалу там советовали что-нибудь вроде "запусти mplayer -v videofile и ищи там нужную тебе информацию". :) Такой вариант меня совсем не устраивал, т. к. обработать эту информацию каким-нибудь awk и вывести в более удобочитаемом виде практически не представлялась возможной, т. к. формат вывода этой информации менялся в зависимости от типа видеофайла.
Но в конце концов удача улыбнулась мне, и товарищ minder на Linuxforum.ru посоветовал мне программу MediaInfo, которая выдавала информацию во вполне удобочитаемом виде. Прочитав вывод mediainfo --Help я к своей необычайной радости узнал, что она, оказывается, может выдавать информацию на основании заданного вами шаблона. Как только я это узнал, то сразу же сел за написание скрипта, который выдавал бы мне только то, что я хочу, и так, как я хочу. А написание этого скрипта послужило поводом для данной статьи.
Вот собственно и сам скрипт:
#!/bin/bash #*************************************************************************** #* Copyright (C) 2007, Konishchev Dmitry * #* http://konishchevdmitry.blogspot.com/ * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU General Public License as published by * #* the Free Software Foundation; either version 3 of the License, or * #* (at your option) any later version. * #* * #* This program is distributed in the hope that it will be useful, * #* but WITHOUT ANY WARRANTY; without even the implied warranty of * #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * #* GNU General Public License for more details. * #**************************************************************************/ # Скрипт получения информации о видеофайле # Использование: get_video_info video_file1 video_file2 ... for file in "$@" do if [ -f "$file" ] then { echo "[b]Файл:[/b] $file" mediainfo "$file" --Inform="General;FILE_SIZE: %FileSize/String4%\nTIME: %PlayTime/String%" \ | sed ' /FILE_SIZE/ s/Gib/Гб/ /FILE_SIZE/ s/MiB/Мб/ /FILE_SIZE/ s/KiB/Кб/ s/FILE_SIZE:/[b]Размер:[\/b]/ /TIME/ s/h/ ч/ /TIME/ s/mn/ мин/ /TIME/ s/s/ сек/ s/TIME:/[b]Продолжительность:[\/b]/' mediainfo "$file" --Inform="Video;\nVIDEO: %Codec/String%, %Width%x%Height% (%AspectRatio%:1), %FrameRate/String%, %BitRate/String%" \ | sed 's/VIDEO:/[b]Видео:[\/b]/; s/Kbps/Кбит\/с/' mediainfo "$file" --Inform="Audio;\nAUDIO: %Codec/String%, %SamplingRate% Hz, %BitRate_Mode% %BitRate/String%" \ | sed 's/AUDIO:/[b]Аудио:[\/b]/; s/Kbps/Кбит\/с/' } | sed -r '/^\s*$/ d' else echo "Bad file: $file" fi doneПрименив данный скрипт к одному или нескольким файлам, вы увидите примерно следующий результат:
Файл: Shpionka_V_1(17)_DVDRip_[torrents.ru].avi Размер: 388.7 Мб Продолжительность: 41 мин 24 сек Видео: XviD, 720x400 (1.800:1), 25.000 fps, 1104 Кбит/с Аудио: AC3, 48000 Hz, CBR 192 Кбит/сЕстественно, та информация, которую он выдает, далеко не предел для MediaInfo. Так что, если кому-то чего-то не хватает, смотрите mediainfo --Help. Данный скрипт - просто демонстрация работы программы.
Примечание: при написании скрипта использовалась MediaInfo версии 0.7.7.7. С остальными ее версиями я правильной работы гарантировать не могу (практика показывает, что некоторые версии работают некорректно).
Получить MediaInfo можно здесь.
На этом считаю данную тему освещенной. Надеюсь, что кому-нибудь эта информация пригодится.
13 комментариев:
Спасибо, Дмитрий. Статья оказалось полезной, единственное, что MediaInfo отказывается выдавать информацию о видеофайлах, если те содержат кириллицу в своём имени.
Не сталкивались с подобным? =)
Локаль utf-8.
Не сталкивался. :) Как-то до сих пор под руку попадались только файлы с английскими названиями...
Побродил сейчас у них по сайту - нашел пару багрепортов:
[ 1537211 ] Errors with special characters in filenames
[ 1748623 ] Fails upon Cyrillic letter in file name
Судя по ответам, проблема есть и до сих пор не исправлена. Причем, похоже, проблема не в самом Mediainfo, а в библитеке, которую она использует. Так что тут, к сожалению, ничем помочь не могу. :(
Кстати, сейчас скачал более новую версию Mediainfo (0.7.5.5) - работает она не так хорошо, как та, на основе которой я писал свой скрипт (0.7.5.1). К примеру, не умеет определять соотношение сторон видеофайла. Так же есть и другие проблемы. Так что пока рекомендую использовать версию (0.7.5.1), с которой скрипт работает наиболее правильно.
А если в будущем выйдет новая версия, в которой появятся существенные улучшения, можно будет переделать скрипт под нее (если потребуется).
Ясно, спасибо за информацию.
Проблема на самом деле не слишком серьёзная, на крайний случай всегда можно переименовать файл, а потом "вернуть" ему старое имя. =)
Блог отличный, подчерпнул для себя полезную информацию из некоторых статей. Ещё раз спасибо.
[dimanish=анонимный :)]
Доброе время суток, прошу прощения , не могли бы Вы сделать тоже самое, но только для Windows.
Очень полезный скрипт, но нет возможности поставить unix
Анонимный, а на чем же вы мне предлагаете сделать его под Windows? :) Там нет такого мощного интерпретатора команд, как в UNIX. По-моему, для Windows графические приложения гораздо предпочтительнее. У MediaInfo есть графическая оболочка под Windows. Рекомендую вам обратить свое внимание на нее.
А не пробовали ли вы использовать для получение видеоинфы mplayer? - у него и поддрежка форматов более полная и он обычно имеется по умолчанию
Если есть какая нить инфа по этому поделитесь плиз
Нет, mplayer я отверг сразу, т. к. парсить его вывод значительно сложнее, а MediaInfo меня устраивал полностью.
а вы не пробовали вариант wine + виндузовый bitrate viewer ?
http://www.tecoltd.com/bitratev.htm
Нет, кроме MediaInfo ничего не пробовал.
%BitRate/String% для контейнера матроска не отображает битрейт.
Попробуйте вытащить инфу своим скриптом из файла с расширением mkv (Matroska)
Анонимный, если поставить последнюю версию (0.7.7.7), то, по крайней мере на тех файлах, на которых я ее испытывал, все нормально работает.
А кто-нибудь в курсе, как написать шаблон вывода инфы так, чтобы перед инфо о субтирах был абзац, но если несколько субтитров, чтобы абзаца между ними не было. При этом, если несколько аудио потоков, то между ними тоже абзаца не должно быть.
Есть очень хороший скрипт, генерящий скриншоты: http://p.outlyer.net/vcs/
Отправить комментарий