SQL : conversion de vidéos du format WMV au format MP4


13 juin 2013
./configure --prefix=<ffmpegInstall> --enable-libx264 --enable-gpl --enable-libmp3lame
make
make install
ffmpeg -i input.wmv -c:v libx264 -crf 23 -c:a libmp3lame -q:a 100 output.mp4
http://superuser.com/questions/73529/how-to-convert-wmv-to-mp4 http://ffmpeg.org/ffmpeg.html

Utiliser Bash (et PHP) pour se faciliter la vie


23 mars 2013

Pour lire le manga Shamo depuis le site KissManga en utilisant son terminal à bon escient voici un petit script PHP :

#!/usr/bin/php -q
<?
if (array_key_exists(2, $_SERVER["argv"]))      {
    $TitleURL = $_SERVER["argv"][2];
    preg_match("@(http://[^/]+)@", $TitleURL, $Matches);
    $RootURL = $Matches[1];
}   else    $RootURL = false;

$Contents = file_get_contents("php://stdin");

//Analyse de la page principale du manga : on en déduit le nom du volume et la page spécifique du volume contenant toutes ses images
if ($_SERVER["argv"][1] == "--main")        preg_match_all('@<a\s+href="([^"]*)" title="Read[^"]+online">([^<]*)</a>@is', $Contents, $Matches);
//Analyse de la page d'un volume donné : on en déduit toutes les URLs des images du volume
if ($_SERVER["argv"][1] == "--volume")      preg_match_all('@lstImages\.push\("([^"]+)"\)@', $Contents, $Matches);

foreach($Matches[1] as $i=>$U)      echo $RootURL === false ? "$U\n" : "$RootURL$U|".trim($Matches[2][$i])."\n";

?>

Pour l'utiliser, du Bash sympathique :

MangaURL='http://kissmanga.com/Manga/Shamo'; MangaDir="shamo"; which wget && dlout='wget -qO -' && dlhead='wget --spider -qS 2>&1' && dlfile='wget -qO'; which curl && dlout='curl -s' && dlhead='curl -sI' && dlfile='curl -s -o'; $dlout "$MangaURL" | ./kissmanga --main "$MangaURL" | while read f; do URL=$(echo $f | awk -F '|' '{print $1}'); Folder=$(echo $f | awk -F '|' '{print $2}'); echo $Folder; mkdir -p "$MangaDir/$Folder"; i=-1; $dlout "$URL" | ./kissmanga --volume | while read img; do ((i++)); echo -n $i" : "$img; ImgType=$($dlhead "$img" | grep 'Content-Type:' | awk -F ':' '{print $2}'); Ext=${ImgType#*/}; PicName=$MangaDir/$Folder/$(printf %03d $i).$Ext; [[ -f $PicName ]] && echo " : existe" && continue; $dlfile "$PicName" "$img"; echo " : ok"; done; done

Et au final on obtient en moins de 20 minutes 5722 images correctement nommées et classées en 20 dossiers.

Ce script est compatible Linux et OSX.

Le script commenté est accessible et donc téléchargeable.

Bash : des choses que je ne savais pas...


19 mai 2011

On en découvre tous les jours sur Bash, surtout si on l'a appris en fonction de ses besoins et pas globalement.

Ainsi, on va rediriger la sortie d'un find vers une boucle while et utiliser des pseudos-classes :

#!/bin/bash
# This bash script will locate and replace spaces in the filenames
DIR="."
# Controlling a loop with bash read command by redirecting STDOUT as a STDIN to while loop
# find will not truncate filenames containing spaces
find $DIR -type f | while read file; do
    # using POSIX class [:space:] to find space in the filename
    if [[ "$file" = *[[:space:]]* ]]; then
        # substitute space with "_" character and consequently rename the file
        mv "$file" `echo $file | tr ' ' '_'`
    fi;
done

Le mot-clé select existe en Bash :

select word in "linux" "bash" "scripting" "tutorial" 
do
  echo "The word you have selected is: $word"
  break     # Break, otherwise endless loop
done

Les expensions ANSI-C :

# as a example we have used \n as a new line, \x40 is hex value for @
# and \56 is octal value for .
echo $'web: www.linuxconfig.org\nemail: web\x40linuxconfig\56org'

Les redirections...

X>&Y : redirige le flux de X vers le flux Y
X> : redirige le flux X (par défaut stdout ou 1) vers un fichier
On peut combiner les redirections précédentes, par exemple : > file 2>&1
Les deux indicateurs de redirections sont équivalents : >& et &>, tous les deux redirigent stdout et stderr vers un fichier
< : remplace stdin avec le contenu d'un fichier
<X : remplace le flux X avec le contenu d'un fichier

Si on utilise ces opérations de redirections avec la commande "exec" on exécute la redirection pour toute la durée du processus courant ou jusqu'à une modification de cette redirection et plus seulement dans le contexte d'une commande donnée. Donner des exemples.

# Link filedescriptor 10 with stdin
# stdin replaced with a file
Exemple : exec 10<&0; exec < Fichier
Son opposé (pour restaurer) : exec 0<&10 10<&-

On va utiliser 'exec < Fichier' pour pouvoir, par exemple, faire un 'while read Line' et énumérer toutes les lignes du fichier Fichier.

Question : est-ce que 'cat Fichier | command' est équivalent à 'command < Fichier' ?

Les expressions et leurs calculs
let Var=Expression : permet le calcul de Expression et le placement de son résultat dans Var
On peut "expandre" (calculer le résultat d'une expression) avec $((Expression)) ou $[ Expression ]
On peut écrire Base#Valeur pour déclarer la base dans laquelle s'exprime la valeur

Accueil