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.

enter image description here

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.