问题描述
在Maverick中,可以选择从YouTube,Vimeo等网站下载Flash视频,方法是在关闭窗口之前将/tmp
目录中的flashxx**
文件复制到另一个位置。但在Natty的Firefox 4中,这不再适用了。为什么?
最佳解决方案
对Flash插件的更新将位置从/tmp
更改为Firefox缓存目录(例如,~/.mozilla/firefox/bq95m4w1.default/Cache
)。不幸的是,缓存的flash文件不像以前那么容易找到,但它是可能的。
以下命令列出了Firefox缓存中的所有Flash文件。
find ~/.mozilla/firefox/*.default/Cache -type f -exec file {} \; | grep Flash
在较新版本的ubuntu试试
find ~/.cache/mozilla/firefox/*.default/Cache -type f -exec file {} \; | grep Flash
次佳解决方案
您可以使用多个Firefox插件从许多网站(如Youtube)中提取FLV文件。
我将在下面展示如何使用最新版本的Flash插件手动完成此操作。
-
访问YouTube视频并等待其完全下载。
-
然后,从命令行运行命令
$ lsof -n | grep Flash
,它显示文件(甚至是内存文件!),并过滤到名称中包含Flash
的命令。 -
你会得到类似
plugin-co 2461 user 17u REG 8,5 1693301 524370 /tmp/FlashXXVkHEM6 (deleted)
的东西。现在,有一个/tmp/FlashXXVkHEM6
但它已被删除。 -
在Linux中,如果删除了某个文件,那么只有当之前打开它的所有程序都关闭时,它才会被删除。也就是说,Flash插件正在使用技巧来隐藏/tmp /FlashXXVkHEM6文件。它创建它并立即
deletes
它。但是由于Flash插件一直在运行,它显然仍然可以使用它。 -
从上面的行我们注意到数字
2461
,它是进程ID。在你的情况下,它可能会有所不同。然后,运行$ cd /proc/2461/fd
并最终执行$ ls -l
这将显示内存文件,特别是lrwx------ 1 user user 64 2011-09-16 10:23 17 -> /tmp/FlashXXVkHEM6 (deleted)
数字’17′(在我的情况下)是您可以用来访问已删除的/tmp/FlashXXVkHEM6
的文件名。因此,只需运行$ cp 17 /tmp/myyoutubevideo.flv
即可恢复Youtube视频!
而已!你手动恢复了Youtube视频!
第三种解决方案
如果您导航到您的/proc文件夹,您将看到一组所有以数字命名的文件夹,包括与第二个字段中的数字匹配的文件夹。
现在导航到此文件夹,然后导航到其子文件夹“fd”。在此文件夹中,您将看到一整个数字选择。这些与文件描述符本身有关。
在此文件夹中运行ls -l
,您将看到这些数字中的每一个都链接到管道,套接字或文件。
在此范围内,第四个字段中的数字将符号链接到我们之前找到的/tmp /Flash *文件。
要测试这是正确的文件,您可以通过mplayer或vlc(mplayer filedescriptornumber
/vlc filedescriptornumber
)运行它。如果您在查找文件名时遇到问题,请尝试使用ls -l | grep Flash
。
为方便起见,请在控制台中尝试此命令:
stat -c %N /proc/*/fd/* 2>&1|awk -F[\`\'] '/Flash/{print$2}'
输出将是这样的:
/proc/4691/fd/17
/proc/4691/fd/18
这将列出您下载的所有Flash流。对于该示例,我的firefox 4浏览器中有2个Flash视频。如果要复制它,只需使用以下命令:
cp /proc/4691/fd/17 ~/Videos/Flash/sample.flv
资料来源:http://n00bsys0p.wordpress.com/2011/02/10/how-to-download-flash-10-2-video-streams-in-linux/
第四种方案
这个小脚本会将下载的Flash文件保存到自定义目录中。
-
制作要保存文件的目录,例如〜/Videos /flvs
mkdir ~/Videos/flvs
-
打开gedit并复制并粘贴此脚本。
#!/bin/bash # flvcache script CACHE=~/.mozilla/firefox/*.default/Cache OUTPUTDIR=~/Videos/flvs MINFILESIZE=2M for f in `find $CACHE -size +$MINFILESIZE` do cp "$f" "$OUTPUTDIR/$o" done nautilus "$OUTPUTDIR"&
-
将文件另存为saveflashall.sh,然后将可执行权限添加到该文件
chmod +x saveflashall.sh
-
然后运行它。
./saveflashall.sh
然后它将打开上面创建的第一个文件夹中的文件。自定义包括所有文件(适用于mpeg和mp4)而不是仅包含flvs。
积分转到http://desdecode.blogspot.com/2011/04/saving-watched-online-videos-linux.html
第五种方案
据我所知,这不是因为firefox也不是natty,而是闪存更新……
您可以使用wireshark
捕获http流,或使用youtube-dl
之类的工具来获取电影文件。
但请记住,这可能不合法,所以请查看当地法规……
第六种方案
您应该使用flashgot下载视频。
第七种方案
Ubuntu 12.04(精确) – Firefox 11说明chlumma1的bash脚本的修改版本。
使用文本编辑器,将下面的代码保存到名为”getvids.sh”的文件中。将其移动到要保存视频的位置。文件上的Right-click,转到属性,将权限更改为“允许作为程序执行”。
您所要做的就是单击脚本,选择“在终端中运行”,它将所有视频文件保存到该目录。要保存整个视频,必须在浏览器中完成加载。它将保存几乎任何网站的视频,包括youtube,vimeo,dailymotion,metacafe,liveleak,facebook。只需删除您不想要的任何视频文件。
(如果你想要的视频没有被保存,那么网站可能正在使用任何缓存检索程序都无法保存的专有流格式。例如:Hulu,netflix,一些youtube视频?)另外,VLC播放器是一个非常适合观看Flash视频。
#!/usr/bin/env bash
# getvids.sh [save_folder]
SAVE_FOLDER="$HOME" # User editable
# If the below option is used, then this script should be run in a terminal.
#CPMOD="-i" # Uncomment to prevent file overwrites
PATERN="libflashplayer"
ALL_PID=`pgrep -f $PATERN`
if [ $? -eq 1 ]; then
echo ERROR: Flashplayer not running
exit 1
fi
if [ ! -z $1 ]; then
echo "Setting save location: $1"
SAVE_FOLDER="$1"
fi
if [ ! -d "$SAVE_FOLDER" ]; then
echo "Save location doesn't exist: $SAVE_FOLDER"
exit 1
fi
for PID in $ALL_PID; do
declare -a OUTFILES=($(ls -lt1 /proc/$PID/fd | grep '/tmp/Flash' | sed 's/^.*\/tmp\///' | sed 's/\ .*$//'))
declare -a FDS=($(ls -lt1 /proc/$PID/fd | grep '/tmp/Flash' | awk '{ print $9 }' ))
for ((i=0; i<${#FDS[@]}; i++)); do
saveas="$SAVE_FOLDER/${OUTFILES[i]}.flv"
echo "Copying video ${FDS[i]} to $saveas"
cp $CPMOD "/proc/$PID/fd/${FDS[i]}" "$saveas"
done
done
那些对终端有所了解的人可以编辑前两个变量并实现一些额外的功能。或者,要实时查看文件,您可以在终端中键入此文件以找出它们的位置for i in $(pgrep -f libflash); do find /proc/$i/fd/ -ls | grep "/tmp/Flash" | awk '{ print $11 }'; done
PS。此外,优秀的工作chlumma1,但裁掉C编程风格循环;)
第八种方案
最新版本的Flash插件通过标记删除来隐藏临时文件。实际上,视频流被下载到”deleted file”。但是,即使删除文件,如果文件由进程打开,那么您可以找到其文件描述符,从而找到文件内容。
这个简单的脚本打印出已打开的Flash视频的文件描述符:
file /proc/*/fd/* 2>/dev/null | grep Flash | cut -f1 -d:
而且,您可能希望从文件描述符创建常规文件,例如:
cp $(file /proc/*/fd/* 2>/dev/null | grep Flash | cut -f1 -d: | head -n 1) video.avi
否则文件描述符不是很方便(记住,它是一个已删除的文件!)
无论您的浏览器如何,该方法都应该有效