LinuxForum.Fans
Тема

HOWTO: Как сохранить видеоролик в виде файла?

Автор: zhevak 95 сообщений 41046 просмотров
#134409

Как записать на диск понравившийся видеоролик


Наверно не только у меня частенько возникает желание сохранить понравившиеся utube-овские ролики. Посмотрел сам, понравилось, захотелось показать другим. Как скопировать себе на комп и сохранить его в виде файла?

В Венде при просмотре роликов в папке юзера имеются скрытые папки, где хранятся временные файлы при просмотре интернетовских страниц. Файлы видео роликов имеют расширение .flv, .avi и другие. Иногда вообще не имеют расширения. Как правило видеоматериалы представляют собой огромные массивы данных, размеры файлов от нескольких мегабайт до сотен мегабайт. Поэтому, даже если имя файла неизвестно и расширения нет, то отличить его от другого мусора можно по объему. Но это Венда. Она меня принципиально не интересует.

Я пользуюсь исключительно Линуксом. А если быть более точным,то Ubuntu и Debian -- вот мои рабочие лошадки.

До недавнего времени Ubuntu (про другие Линуксы ничего не скажу. Я не знаю их, поэтому говорить за них не буду.) сохраняла временные файлы в директории /tmp. Оно и понятно! Этот директорий как раз и создан для таких целей -- для временного хранения временных файлов. Даже если приложение за собой не почистит свой мусор, при следующей загрузке системы директорий /tmp будет девственно чист. Удобно?- Да! Это Вам не Венда, которая засирается по мере эксплуатации. В прочем, не стоит отвлекаться на быдло-оси для народа. Давайте поговорим о высоком.

Так вот, я так и делал: запускал как обычно просмотр ролика в Firefox, а когда просмотр заканчивал, я не спешил закрывать страницу. Дело в том, что пока страница бала открыта, временный файл существовал в директории /tmp. В общем, если ролик понравился, то мне оставалось зайти в этот директорий и скопировать самый большой файл в какое-нибудь другое место. Файлы роликов обычно имели странные имена, начинающиеся на Flash, далее следовали случайные цифры и буквы. В принципе отличить файл от других не составляло особого труда.

С некоторых пор, к сожалению, я заметил, что жадные интернет-товарищи ввели новый механизм сохранения роликом на компе. Можно так же как и прежде смотреть ролик самому, а вот скопировать -- фиг! Не стало файла. Причем следует заметить, что файл-то существует явно, но обычных средств для того что бы его увидеть -- не хватает.


Если вам не интересно, что там тарахтит под капотом, можете пропустить этот кусок текста

Поскольку я программист, то для меня это не составило какого-то особого секрета. В отличие от Венды, в Линуксе файловые системы строятся немножко иначе, более изящно что-ли. Вот смотрите, традиционные операции с файлом следующие:
* открыть файл
* закрыть файл
* создать файл
* удалить файл
* читать из файла
* писать в файл

Все просто и понятно. Блудить негде. Такая картина наблюдается как в Линуксе, так и в Венде. Чтобы создать временный файл, имя которого гарантированно не будет совпадать с множеством имен других файлов файл, в системе (и в Линуксе, и в Винде) присутствует функция генерации уникального имени. Да-да, Вы правы, те файлы, о которых я говорил чуть ранее, которые назывались типа Flash6f8ty3, имена их как раз генерировались при помощи этой функции. Все чудесно работает как в Линуксе, так и в Венде.

Отличие Линукса заключается в том, что в нем есть еще один механизм для работы с временными файлами, на который Венда не способна. Тут я должен Вас немного просветить программированием. Самую малость. Потерпите!

Как операционные системы работают с файлами? Открытие и создание файлов осуществляется по их именам. В процессе открытия/создания файлу присваивается уникальный номер (число, дескриптор, идентификатор, хэндлер -- в данном контексте это все одно и тоже!). И правильно! Что легче указывать при каждой операции записи: уникальное число (присущее только этому файлу) или его имя? Компьютеру с числами проще и быстрее работать.) Таким образом, ели вам необходимо записать, считать ил закрыть файл, вы не таскаете по всей программе его имя, а указываете только его число, которое его однозначно идентифицирует.

Теперь смотрите внимательно. Я буду говорить об отличие в работе двух конкурирующих операционных систем.

В Венде, если вы создадите файл (получите его уникальный номер) и тут же его удалите, то файл сразу перестает существовать. Дальнейшие операции прочитать/записать в файл (по уникальному его номеру) будут сопровождаться ошибками. Все правильно -- файла-то не существует! Поэтому здесь говорить не о чем. Фи, как неинтересно!

Посмотрим, как это реализовано в Линуксе. Давайте создадим какой-нибудь файл (получим его число) и тут же его удалим. Файл удален. Он не существует. Но у нас есть его число -- его идентификатор. В Вендовом случае -- число уже бесполезно. Помер человек, не услышит он своего имени, не отзовется. В Линуксе клинический случай лечится! Оказывается Линукс удаляет файл для всех, кроме нашей проги. Для нашей проги файл удалится тогда, когда мы ее окончательно закроем. Значит, пока мы знаем этот уникальный номер файла, мы можем читать и писать в этот файл. Да это же виртуальный мир! Файла как такового нет, но мы с ним можем продолжать работать! Класс!!! Никто кроме нас не знает и даже не догадывается о нашем временном файле. Секретность на высоте. Венде такое даже не снилось!

Возвращаемся в сознание. Проигрыватель, который показывает нам видеоролики в Firefox-е как раз и использует этот механизм засекречивания информации. Если бы такое было в Венде, то случай наверно был бы фатальным. Но мы-то с вами имеем ось, работу которой контролирует не команда ухарей из Рэдмода, а исключительно мы!

Вспоминаем теорию, вспоминаем как устроен и работает Линукс. Конкретно прокачиваем свои знания по виртуальной файловой системе /proc.

Если вы отцепите диск и посмотрите на его файловую систему, то не обнаружите нем директория /proc. Этот директорий виртуальный. Он существует только в оперативной памяти и только тогда, когда загружен и работает Линукс. Если вы зайдет в этот катало и посмотрите на его содержимое, то вы увидите множество директорий, названия которых -- есть числа. Это не совсем директории. Это -- как бы программы (точнее -- процессы). Когда запускается программа (т.е. создается процесс), то система этому процессу (так же как и файлу, см. выше) присваивает уникальное число, которое называется не иначе как идентификатор процесса (PID).

Теперь, если зайти в директорий какого-нибудь процесса, то мы увидим еще целую кучу поддиректорий и файлов. (Не забывайте, что в Линуксе всё есть файл!) найдите среди них директорий с именем fd. Это ни что иное, как директорий, содержащий список файловых дескрипторов (fd = file descriptor). Да-да-да!!! Вы угадали! Это как раз и есть те самые числа, которые однозначно определяют открытые файлы.

Теперь наша задача по сохранению видеоролика сводится к последовательности действий:
* узнать идентификатор процесса (PID), который показывает нам ролик
* зайти в директорий /proc/xxx/fd/ и определить дескриптор, который соответствует файлу ролика
* скопировать файл (соответствующий этому дескриптору) в наше место.


А теперь конкретная инструкция

1. Видеоролики показывает нам программа-плагин plugin-containe. Определим ее PID:

text

alex@zhevak:~$ ps -e | grep plugin-containe
 1746 ?        00:00:03 plugin-containe

У меня на компе этот процесс имеет PID равный 1746. У вас будет какой-то свой.

2. Идем смотреть на дескрипторы файлов:

text

alex@zhevak:~$ ls -l /proc/1746/fd
итого 0
lr-x------ 1 alex alex 64 2011-02-27 21:56 0 -> /dev/null
lrwx------ 1 alex alex 64 2011-02-27 21:56 1 -> /home/alex/.xsession-errors
lrwx------ 1 alex alex 64 2011-02-27 21:56 10 -> pipe:[277640]
lrwx------ 1 alex alex 64 2011-02-27 21:56 11 -> pipe:[277641]
lr-x------ 1 alex alex 64 2011-02-27 21:56 12 -> pipe:[277641]
l-wx------ 1 alex alex 64 2011-02-27 21:56 13 -> socket:[277644]
lrwx------ 1 alex alex 64 2011-02-27 21:56 14 -> /home/alex/.mozilla/firefox/0mzlz24h.default/cert8.db
lrwx------ 1 alex alex 64 2011-02-27 21:56 15 -> /home/alex/.mozilla/firefox/0mzlz24h.default/key3.db
l-wx------ 1 alex alex 64 2011-02-27 21:56 16 -> /tmp/FlashXXmfZRgz (deleted)
lrwx------ 1 alex alex 64 2011-02-27 21:56 17 -> pipe:[299684]
lrwx------ 1 alex alex 64 2011-02-27 21:56 18 -> pipe:[299684]
lrwx------ 1 alex alex 64 2011-02-27 21:56 19 -> pipe:[299685]
lrwx------ 1 alex alex 64 2011-02-27 21:56 2 -> /home/alex/.xsession-errors
lr-x------ 1 alex alex 64 2011-02-27 21:56 20 -> pipe:[299685]
l-wx------ 1 alex alex 64 2011-02-27 21:56 21 -> socket:[299689]
lrwx------ 1 alex alex 64 2011-02-27 21:56 3 -> socket:[277552]
lr-x------ 1 alex alex 64 2011-02-27 21:56 4 -> anon_inode:[eventpoll]
lrwx------ 1 alex alex 64 2011-02-27 21:56 42 -> socket:[277553]
l-wx------ 1 alex alex 64 2011-02-27 21:56 5 -> socket:[277637]
lr-x------ 1 alex alex 64 2011-02-27 21:56 6 -> socket:[277638]
l-wx------ 1 alex alex 64 2011-02-27 21:56 7 -> pipe:[277639]
lr-x------ 1 alex alex 64 2011-02-27 21:56 8 -> pipe:[277639]
l-wx------ 1 alex alex 64 2011-02-27 21:56 9 -> pipe:[277640]

Видите? Вот он, гад -- /tmp/FlashXXmfZRgz, да еще и прикрылся: говорит, что он удален (deleted). Но нам это уже не важно. Нам нужно знать только его номер (дескриптор). Дескриптор файлов -- это, собственно, числа перед стрелочками. Дескрипторы -- это как бы soft-линки на файлы (по Вендовому -- указатели, ссылки).

3. Копируем файл, на который "указывает" дескриптор в наше безопасное место:

text

alex@zhevak:~$ dd if=/proc/1746/fd/16 of=funny.flv bs=4096
993+1 записей считано
993+1 записей написано
скопировано 4070149 байт (4,1 MB), 0,043064 c, 94,5 MB/c

Ну вот и все, господа! Теперь вы имеете в своем домашнем директории нормальный файл видеоролика. (В моем примере этот файл называется funny.flv)

Приятных вам просмотров!

UPDATE
1.
Мне тут задали вопрос: "А как не ошибиться? Как мы можем знать, что это за файл?"

В Линуксе есть такая команда file, которая расскажет вам о типе файла. Но поскольку дескриптор -- это сим-линк, то мы при запросе должны указать ключик -L. Тогда команда file расскажет нам не о самой сим-линке, а о том файле, на кого она показывает:


alex@zhevak:~$ file -L /proc/1746/fd/16
/proc/1746/fd/16: Macromedia Flash Video

Как мы видим, у нас все нормально -- это действительно файл с видеороликом.


2.
Я сейчас перечитал этот текст, и немного ужаснулся. Грамматических ошибок -- море! Я как-нибудь их потом исправлю. Жутко хочу спать. Категорически не высыпаюсь в последнее время. А может весна, авитаминоз :(

#134420

отжёг , чесно слово ! В FAQ бы его , но стоит зашифровать (убрать упоминание о флеше ) иначе найдется какой нибудь обиженный мудила который этот финт обернёт во зло для всех нас . Но инструкция полезная , не только для роликов , но и для других , более прозаичных вещей , например горячего восстановления удалённых файлов .

#134466
mvt написал:
А что, DownloadHelper уже не работает? oO

не всегда , если идет прямым потоком без кеширования DownloadHelper не поможет .

#134469

Это редко. С ютуба точно берет.

#134471
mvt написал:
Это редко. С ютуба точно берет.

там и сохранять-то нечего , в таком убогом качестве - бр-р-р ...

#134479
zhevak написал:
Как записать на диск понравившийся видеоролик
Наверно не только у меня частенько возникает желание сохранить понравившиеся utube-овские ролики. Посмотрел сам, понравилось, захотелось показать другим.

:)

#134496

Благодарю за инструкцию, а то я привык искать ролик в кэше браузера
командой "ls -lt|less".

Пётр.

#134517
Peter написал:
я привык искать ролик в кэше браузера

Все верно, в /tmp и есть кеш. Надо стартануть ролик, посмотреть какой файл появился и его брать.

#134549

zhevak, слишком сложно, не читабельно/ oO

FireFox
flashgot к FF. (В правом нижнем углу будет маленькая иконка в виде диафильма, пару кликов по ней мышкой и выбираем путь для сохранения файла в директорию, далее ОК, и ждем пока ролик загрузится =) )
Safari
Для тех у кого есть MAC OS X. Здесь вообще без всяких плагинов можно обойтись. Запускаем ролик, далее Окно > Активность, и смотрим все активные соединения, выбираем наш ролик с расширением flv или m4v и скачиваем , кстати, таким образом выдернуть прямую ссылку на файл, далее "Терминал" wget + <ссылка> =)

Данный метод подходит практически для всех типов файлов к примеру: flv, m4v, mp4, mp3

#134766
papin-aziat написал:
[quote=Peter] я привык искать ролик в кэше браузера

Все верно, в /tmp и есть кеш. Надо стартануть ролик, посмотреть какой файл появился и его брать.[/quote]
Да, но я имел в виду кэш именно браузера, где всё сохраняется, пока
не будет превышен лимит места, т.е. ~/.mozilla/firefox/xxxxx.default/Cache/
Пётр.

#134825
Peter написал:
кэш именно браузера, где всё сохраняется, пока
не будет превышен лимит места, т.е. ~/.mozilla/firefox/xxxxx.default/Cache/

Да, тут файлы видеороликов все еще продолжают появляться. Спасибо!

Я не знал про этот кэш. Я думал, что FF кэширует свой контент как раз в /tmp.
А когда в /tmp перестали появляться файлы видеороликов, я решил проблему
описанным выше способом, ну и с вами решением поделился.

Правда, остается неясным, зачем Файрфоксу дважды кэшировать -- в /tmp и в ~.

#134889

zhevak, спасибо за мануал.
только хотел-бы дополнить: есть способ проще:
[console]$ lsof | grep seamonkey[/console]
покажет все файлы, которые сейчас открыты данной программой (например seamonkey). Впрочем это не умаляет ценности вашей статьи, ибо lsof это всего-лишь удобный интерфейс к /proc/

#134892
zhevak написал:
Правда, остается неясным, зачем Файрфоксу дважды кэшировать -- в /tmp и в ~.

/tmp/ это системный кеш для всех. В безопасных системах он очищается при рестарте, или хранится в памяти. Потому приходится использовать дополнительный кеш в ~, который почти всегда доступен, и именно из него ФФ может восстановится после сбоя. А сбои в ФФ неизбежны, из-за кривых и глючных плагинов. Например от адобы :( Мозилловцы с этим принципиально ничего не могут поделать, вот и городят такие костыли.

i2ks написал:
слишком сложно, не читабельно/

а мне - понравилось. главное - работает. и ошибок нет, в отличие от того УГ, которого в сети как грязи.

#134901

zhevak, интересный пост, а не дадите ссылочку на ролик который удаляется из /tmp во время просмотра, по эксперементируем.

Показать

Странно, но у мне кажется Вы изначально опубликовали только часть поста, иначе зачем мы отвечали smile .
#134920
drBatty написал:
а мне - понравилось. главное - работает. и ошибок нет, в отличие от того УГ, которого в сети как грязи.

На потолке спать пробовали? Не удобно наверно, то-то =)
Слишком много теории, для рядового пользователя которая ни к чему, так мне сказала одна сотрудница, которая пыталась скачать файл с "Вконтакте"(это с точки зрения обыкновенного пользователя, котором до консоли как до китайской стены на лыжах по асфальту). Вот поэтому для удобства лучше пользоваться плагинами.

#134933
i2ks написал:
Слишком много теории, для рядового пользователя которая ни к чему, так мне сказала одна сотрудница, которая пыталась скачать файл с "Вконтакте"(это с точки зрения обыкновенного пользователя, котором до консоли как до китайской стены на лыжах по асфальту).

в мире виндовс тоже есть плагины. но зачем-же Марк Руссиновичь выдумал FileMon, которым умные маздайщики невозбранно скачивают тонны разных файликов? Плагины это конечно хорошо, но мы-же тут обманываем тех, кто пытается обманывать нас - нам не дают смотреть то, что мы скачиваем и смотрим. Те, кому принадлежит этот ютуб (корпорация Добра) с этим борются, а народ пишет плагины. Война идёт с переменным успехом. Но некоторые знают универсальный способ, который вы теперь тоже знаете. Разве это плохо? Вашей сотруднице это не интересно? Это её проблемы. Мне интересно. Никто-же не заставляет?

i2ks написал:
Вот поэтому для удобства лучше пользоваться плагинами.

...а можно скрипт написать, который делает тоже самое. лично мне лень, но удобнее пользоваться своим скриптом, чем чьим-то плагином. Корпорация Добра ведь опять какую-нибудь гадость замутит, и останитесь вы без свежего ***. :) А скрипт подправить - пара минут :)

#134937
drBatty написал:
Вашей сотруднице это не интересно? Это её проблемы. Мне интересно. Никто-же не заставляет?

Дело не в том кому интересно, а кому нет, дело в простоте использования =) Мне к примеру проще выдирать прямые ссылки и потом wget'ом складывать в папку, а сотруднице с помощью 3х кликов мышкой =)

#134946
i2ks написал:
Дело не в том кому интересно, а кому нет, дело в простоте использования smile Мне к примеру проще выдирать прямые ссылки и потом wget'ом складывать в папку, а сотруднице с помощью 3х кликов мышкой

а мне - что-бы sed сама выдирала, а wget сам качал. а я тут всякую ересь писать буду. :)
вот только, что-бы так сделать, ваш способ не подойдёт, а способ а-ля zhevak, легко.

Как вы считаете, чей способ проще? Конечно мой, ибо мне вообще ничего не надо делать! ИМХО, в компьютере надо ВСЁ автоматизировать, и избавляться от рутинного труда везде, где это только возможно. ИМХО, недостойно человека выполнять тупо одни и те-же действия, это было нужно лишь до изобретения компьютера. Теперь можно 1 раз придумать алгоритм, а компьютер его выполнит необходимое число раз.

Войдите или зарегистрируйтесь, чтобы ответить.