2011-12-22 23 views
6

Estaba escribiendo este pequeño script el otro día. Es un pequeño programa que básicamente encuentra los videos flash que se ejecutan en el navegador y los descarga. el código es algo como esto ..Determinar cuándo un video ha completado el almacenamiento en búfer

código:

path=$(stat -c %N /proc/*/fd/* 2>&1|awk -F[\`\'] '/lash/{print$2}') 
pid=$(echo $path | cut -d/-f3) 
name=$(ps --no-header -o comm -p $pid) 
mid=$(wmctrl -l | grep -i $name) 
filename=`echo $mid | cut -c 21-$(($(echo $mid | wc -c)-16))` 
cp $path /home/Downloads/"$filename.avi" 

esto es sólo una parte de la primera línea code.The del código obtiene el camino a la temperatura de borrado file.The segunda línea se hace el pid Tercero, el nombre del proceso. Cuarta la identificación de la ventana y el título de la ventana. La quinta línea manipula la salida de wmctrl para extraer el nombre del video reproducido (la mayoría de las veces el nombre del video está incluido en el título de la ventana ... por ejemplo, youtube)

Ahora cuando este script se ejecuta después de que todo el video se haya almacenado, funciona sin problemas (este script funciona para google chrome) .. y copia el archivo de la carpeta/proc // fd a la carpeta de descargas y cambia su nombre al nombre de archivo extraído.

Ahora aquí viene la parte del truco. Quiero automatizar este código, por ejemplo, para que yo pueda ejecutar este código a partir de ahora tengo que esperar a que el video termine el almacenamiento en búfer (digamos youtube).

Quiero que esta secuencia de comandos determine cuándo el video ha terminado de almacenar en búfer y luego continúe con la parte de copia sin tener que ejecutarlo manualmente al final de un video.

Entonces, ¿hay alguna manera de que pueda saber cuándo un video ha completado el almacenamiento en búfer?

Soy un beginner.Any sugerencias para mejorar el código son bienvenidos

+0

Idea interesante. ¿Tiene que preocuparse de que el archivo tmp desaparezca después de que se termine de reproducir o es parte de la memoria caché del navegador que solo se elimina ocasionalmente? Además, para el nombre de archivo = sección, ¿por qué usa los trazos, toda la belleza de $ (...) para la sustitución de cmd es que puede anidarlos sin ningún problema de cotización. Buena suerte. – shellter

+0

@shellter: ¡Gracias amigo! Finalmente lo descubrí. El archivo desaparece solo cuando se cancela el proceso. Es decir, el archivo permanece en el directorio hasta que se cierra el navegador. Esto es evidente por el hecho de que los videos (principalmente de youtube) no se descargan cuando reproducirlos, de hecho se reproducen desde el caché (o similar). Y los backticks, bueno, estaba recibiendo un error inesperado. La lógica es que el tamaño del archivo (del video que se está descargando) cambia constantemente hasta que se completa el almacenamiento en búfer. Así que verificamos el tamaño del archivo hasta que se vuelve constante y luego activamos la función de descarga. –

+0

Lo siento fue corto en caracteres allí.el código es monitor_size() { one = 'du -L" $ path "| awk '{print $ 1}' ' sleep 5 two =' du -L "$ ruta" | awk '{print $ 1}' ' si [$ $ un solo eq dos] continuación descarga demás monitor_size fi } donde la función de descarga contiene el anterior code.Btw, supongo que tienes razón sobre la desaparición del archivo tmp. El streaming es diferente. YouTube simplemente descarga los archivos a su computadora. : suspiro: –

Respuesta

0

para obtener el tamaño de archivo, puede utilizar:

stat -c %s $filename 

con ello se puede establecer un bucle while para comprobar si el archivo todavía está cambiando

CURSIZE=0 
LASTSIZE=1 
while ([ $CURSIZE -ne $LASTSIZE ]) do 
    LASTSIZE=`stat -c %s $filename` 
    sleep 1 
CURSIZE=`stat -c %s $filename` 
done 

después de eso, usted debe ser capaz de copiarlo asumiendo su conexión a Internet no tener hipo para mayor que el valor del sueño

Cuestiones relacionadas