Where does Chromium keep the YouTube video files?
I know that in Windows, Internet Explorer stores .flv
temp files in temporary folder (C:\Users\%username%\AppData\Local\Microsoft\Windows\Temporary Internet Files
) when viewing YouTube. And the same make and Google Chrome in Windows (C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\Cache
). So it's easy to find a copy of that .flv
file.
How about Chromium in Ubuntu? Does it store browsing temp data and where?
Solution 1:
I made a little research and now I can come with the answer that is not so simple as it seems at first sight.
I searched a lot on Google, and almost everything is pointing to the ~/.cache/chromium/Default
folder. It’s the folder where you should find google chrome’s cache files. But there are no big flash video files (like YouTube has), just small ones.
In the end, to answer the question, I came to these conclusions:
- First, you have to open an YouTube video and let it stream from internet.
- In a Terminal (Ctrl+Alt+T), you should get PID of Chromium that use Flash Player plugin. You can use various commands, but
ps
will do just fine:ps ax | grep flash
. -
Once you have this PID you can find out the name of video file that just was streamed on Youtube:
ls -l /proc/[*PID*]/fd | grep Flash
. You will see as result something like this:lrwx------ 1 [*user*] [*user*] 64 mai 2 09:48 [*video file name - is a number*] -> /tmp/FlashXX4PeKRY (deleted)`
And here is the answer of the question: the last video file streamed on YouTube and cached on the system is:
/proc/[*PID*]/fd/[*video file name - is a number*]
-
Now, if you want, you should copy them anywhere on the system:
cp /proc/[*PID*]/fd/[*video file name - is a number*] ~/Videos/[*new video file name*].flv
And now you have the last video watched on Youtube in your personal Videos collection.
Solution 2:
I wrote a small bash script that automates the excellent solution from Radu:
#!/bin/bash
pidNum=$(ps ax | grep flash | grep chromium | grep -v "grep" | sed -e 's/^ *//g' -e 's/ *$//g' | tr -s " " | cut -d " " -f 1)
procNum=$(ls -l /proc/${pidNum}/fd | grep Flash | tr -s " " | cut -d " " -f 9)
filename=$1
if [[ "$filename" == "" ]]; then
filename=$procNum
fi
echo "Copying /proc/${pidNum}/fd/${procNum} to '${filename}.flv'"
cp /proc/${pidNum}/fd/${procNum} "${filename}.flv"
ls -lah "${filename}.flv"
Solution 3:
I do it manually like this: define this alias in /etc/bash.bashrc
alias findflash='find /proc/ -maxdepth 1 -type d -exec lsfd.sh {} \;'
and create this script in /usr/local/bin/lsfd.sh
#!/bin/bash
ls -l $1/fd/ 2>/dev/null 3>/dev/null| grep -i 'flash' 1>/dev/null 2>/dev/null 3>/dev/null;
if [ $? -eq "0" ];
then
echo $1/fd/;
ls -l $1/fd/ | grep -i 'flash';
fi
result:
root@juanmf-V570:/tmp# findflash
/proc/31591/fd/
lrwx------ 1 root root 64 Aug 19 23:59 37 -> /home/juanmf/.config/google-chrome/Default/Pepper Data/Shockwave Flash/.com.google.Chrome.9Oc0fE (deleted)
lrwx------ 1 root root 64 Aug 19 23:59 38 -> /home/juanmf/.config/google-chrome/Default/Pepper Data/Shockwave Flash/.com.google.Chrome.hcEvxv (deleted)
then I know where the files are and use mplayer to see wich one I want. then manually copy.