======Automatisation de copie de fichiers depuis une liste=====
#!/bin/bash
OUTPUT_DIR="/media/bvandepo/25228E1E7D338845/films/"
INPUT_FILENAME="listepouralain.txt"
#fichier qui contient une liste de dossier/fichier entouré de '
old_IFS=$IFS # sauvegarde de l'ancien séparateur de champ
IFS=$'\n' #le séparateur par defaut (espace) ne va pas car les noms de fichiers listés peuvent en contenir mais doivent être traités en une seule fois
#on règle un nouveau séparateur de champ, le caractère fin de ligne
mkdir -p ${OUTPUT_DIR}
while read line #for each line of list
do
if [ ! -z "${line}" ]; #avoid processing empty lines
then
echo processing ${line}
#supprime le premier caractère ' et les 2 derniers caracteres ' et \r
filename=${line:1:$((${#line}-3))}
echo processing ${filename}
#cp "${filename}" "${OUTPUT_DIR}"
rsync -av "${filename}" "${OUTPUT_DIR}"
fi
done < $INPUT_FILENAME
IFS=$old_IFS # rétablissement du séparateur de champ par défaut
=====Génération de pdf à partir de office impress=====
#!/bin/bash
#B. Vandeportaele 2018
OUTPUT_DIR="./pdf/"
OUTPUT_FILENAME=cours_comm
#check that soffice is not already run
SOFFICE_RUNNING=$(pstree | grep soffice)
if [ ! -z "$SOFFICE_RUNNING" ];
then
echo soffice have to be closed before lauching this script!
echo save your data and try pkill soffice
exit -1
fi
#create output directory
mkdir -p ${OUTPUT_DIR}
#generate list and convert files to pdf if required
FILE_LIST=""
while read line #for each line of list
do
echo processing ${line}
if [ ! -z "${line}" ]; #avoid processing empty lines
then
OFFICE_FILE=${line}
PDF_FILE="${OFFICE_FILE/".odp"/".pdf"}"
PDF_FILE_WITH_FOLDER="${OUTPUT_DIR}${PDF_FILE}"
# test if the office file is newer than the pdf, it works also if the pdf file is not existing
if [ ${OFFICE_FILE} -nt ${PDF_FILE_WITH_FOLDER} ]
then
echo "this file has changed, converting it to pdf: ${OFFICE_FILE} -> ${PDF_FILE_WITH_FOLDER}"
rm ${PDF_FILE_WITH_FOLDER}
#convert each individual file to pdf
echo "soffice --convert-to pdf --outdir ${OUTPUT_DIR} ${OFFICE_FILE}"
soffice --convert-to pdf --outdir ${OUTPUT_DIR} ${OFFICE_FILE}
else
echo "this file has not changed, keeping the previous pdf: ${OFFICE_FILE} -> ${PDF_FILE_WITH_FOLDER}"
fi
#add to the list of file in variable and subsitute odp with pdf
FILE_LIST="${FILE_LIST} ${OUTPUT_DIR}${line/".odp"/".pdf"}"
fi
done < listoffilestoconcatenate.txt
#I'm obliged to use while .... in that order so the scope of ${FILE_LIST} is not only local inside the loop
echo list of files: ${FILE_LIST}
#concatenate the files to a single one
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=${OUTPUT_DIR}${OUTPUT_FILENAME}.pdf -dBATCH ${FILE_LIST}
#count the number of pages in the concatened file
# https://stackoverflow.com/questions/1672580/get-number-of-pages-in-a-pdf-using-a-cmd-batch-file
NUMBEROFPAGES=$(pdfinfo "${OUTPUT_DIR}${OUTPUT_FILENAME}.pdf" | grep Pages | sed 's/[^0-9]*//')
echo $NUMBEROFPAGES pages found
#set the right number of pages to generate in numbers.tex from the generic numbers.in.tex file
sed "s/NUMBEROFPAGESTOGENERATE/$NUMBEROFPAGES/g" ${OUTPUT_DIR}numbers.tex
cat ${OUTPUT_DIR}numbers.tex
#compute the pdf for pages numbers
pdflatex -output-directory ${OUTPUT_DIR} ${OUTPUT_DIR}numbers.tex
#merge the pdf containing the content and the pdf containing the page numbers
# http://cazencott.info/index.php/post/2015/04/30/Numbering-PDF-Pages
# sudo apt install pdftk
if false
then
#split files to individual pages
pdftk ${OUTPUT_DIR}numbers.pdf burst output ${OUTPUT_DIR}number_%03d.pdf
pdftk ${OUTPUT_DIR}${OUTPUT_FILENAME}.pdf burst output ${OUTPUT_DIR}page_%03d.pdf
for i in $(seq -f %03g 1 $NUMBEROFPAGES) ; do pdftk ${OUTPUT_DIR}page_$i.pdf stamp ${OUTPUT_DIR}number_$i.pdf ${OUTPUT_DIR}output new_$i.pdf ; done
pdftk ${OUTPUT_DIR}new_???.pdf output ${OUTPUT_DIR}${OUTPUT_FILENAME}_numbered.pdf
else
#direct method dealing with the 2 files without merging individual pages
pdftk ${OUTPUT_DIR}${OUTPUT_FILENAME}.pdf multistamp ${OUTPUT_DIR}numbers.pdf output ${OUTPUT_DIR}${OUTPUT_FILENAME}_numbered.pdf
fi
#generate the 6 slides per page for printing
pdfnup --nup 2x3 --no-landscape -o ${OUTPUT_DIR}${OUTPUT_FILENAME}_numbered_six.pdf ${OUTPUT_DIR}${OUTPUT_FILENAME}_numbered.pdf
#add annexes if required....
=====Concaténation de vidéos GOPRO=====
https://trac.ffmpeg.org/wiki/Concatenate
===Mise cote à cote de 2 vidéos===
#!/bin/bash
#cutting the video
INFILE1="../2017_Photos/2017_11_14_gensac_parapente/VID_20171114_135427.3gp"
START_TIME1="0:39"
#de 39 à 53 =14 secondes
#retournement à 43, soit apres 4 secondes
INFILE2="../2017_Photos/2017_11_14_gensac_parapente/GOPR0844.MP4"
#https://www.ffmpeg.org/doxygen/0.7/parseutils_8c-source.html#l00487
#d'après 00487 int av_parse_time(int64_t *timeval, const char *datestr, int duration)
#la partie fractionnaire de secondes est exprimée en us
START_TIME2="2:18.500000"
#retournement à 2:23
DURATION="0:00:14"
TMPDIR="/tmp/myvideo/"
rm -rf $TMPDIR
mkir -p $TMPDIR
#INTERMEDIATEFILE="cutted.mkv"
#OUTFILE="res.mkv"
#ffmpeg -i $INFILE -ss $START_TIME -t $DURATION -c copy $INTERMEDIATEFILE
#converting the video to images 1
mkdir -p $TMPDIR/imgs1
avconv -i $INFILE1 -r 30 -f image2 -ss $START_TIME1 -t $DURATION $TMPDIR/imgs1/im-%06d.bmp
#converting the video to images 2
mkdir -p $TMPDIR/imgs2
avconv -i $INFILE2 -r 30 -f image2 -ss $START_TIME2 -t $DURATION $TMPDIR/imgs2/im-%06d.bmp
#concatenate the images
mkdir -p $TMPDIR/imgs3
rm $TMPDIR/list
#ls -c1 *.pgm | sort >>list
#genere la liste ordonnée des fichiers pgm du dossier dans un fichier list
find $TMPDIR/imgs1 -type f -printf "%f\n" | grep bmp | sort >>$TMPDIR/list
#pour chaque ligne de list
cat $TMPDIR/list | while read line
do
echo ${line}
convert $TMPDIR/imgs1/${line} $TMPDIR/imgs2/${line} +append $TMPDIR/imgs3/${line}
rm $TMPDIR/imgs1/${line}
rm $TMPDIR/imgs2/${line}
done
#extrait la piste audio
rm $TMPDIR/audio.mp3
avconv -i $INFILE1 -ss $START_TIME1 -t $DURATION $TMPDIR/audio.mp3
#generate the movie file from file with name pattern: out-img0001.png
avconv -i $TMPDIR/audio.mp3 -i $TMPDIR/imgs3/im-%06d.bmp -f avi -vcodec mpeg4 -b 4000k -g 300 -bf 2 -y ./video.mpg
===Version fonctionnelle qui génère une liste de fichier texte avant de concaténer===
#!/bin/bash
#B. Vandeportaele
#script to concatenate video files from the GOPRO using ffmpeg
#if the filenames are not in sequence as generated by the script, a list of file can be used. The file containing the list should be
#made of lines such as: file 'GOPR0650.MP4'
#ffmpeg -f concat -safe 0 -i file-list_to_concatenate.txt -ss 1:16 -t 30:00 -c copy GOPR0650_complete_cut.MP4
NUMBER=0711
START_TIME="0:19"
DURATION="10:00:00"
rm ./filelisttoconcatenate.txt
#begin with a list of 1 file
echo "file './GOPR$NUMBER.MP4'" >> filelisttoconcatenate.txt
#loop for 10 next files and try to detect if the file exists then add it to the list
for I in `seq -w 1 10`;
do
file="GP$I$NUMBER.MP4"
if [ -f "$file" ]
then
echo "$file found."
# LIST="$LIST|$file"
echo "file ./'$file'" >> filelisttoconcatenate.txt
else
echo "$file not found."
fi
done
echo " " >> filelisttoconcatenate.txt
#generate an output file name
OUTFILE="GOPR${NUMBER}_completecut.MP4"
#generate the command
COMMAND="ffmpeg -f concat -safe 0 -i filelisttoconcatenate.txt -ss $START_TIME -t $DURATION -c copy $OUTFILE"
echo "Do you want to execute the following command (y/n):"
echo $COMMAND
read line
if [ "$line" == "y" ]; then
#execute the command in the variable
eval "$COMMAND"
fi
===Version qui ne fonctionne pas toujours===
#!/bin/bash
#B. Vandeportaele
#script to concatenate video files from the GOPRO using ffmpeg
#if the filenames are not in sequence as generated by the script, a list of file can be used. The file containing the list should be
#made of lines such as: file 'GOPR0650.MP4'
#ffmpeg -f concat -safe 0 -i file-list_to_concatenate.txt -ss 1:16 -t 30:00 -c copy GOPR0650_complete_cut.MP4
NUMBER=0711
START_TIME="0:19"
DURATION="2:0:00"
#construct a string that contains all the necessary file names
#LIST="\"concat:GOPR$NUMBER.MP4|GP01$NUMBER.MP4\""
#LIST="GOPR$NUMBER.MP4|GP01$NUMBER.MP4|GP02$NUMBER.MP4|GP03$NUMBER.MP4|GP04$NUMBER.MP4|GP05$NUMBER.MP4|GP06$NUMBER.MP4|GP07$NUMBER.MP4|GP08$NUMBER.MP4|GP09$NUMBER.MP4"
#begin with a list of 1 file
LIST="\"concat:GOPR$NUMBER.MP4"
echo $LIST
#loop for 10 next files and try to detect if the file exists then add it to the list
for I in `seq -w 1 10`;
do
file="GP$I$NUMBER.MP4"
if [ -f "$file" ]
then
echo "$file found."
LIST="$LIST|$file"
else
echo "$file not found."
fi
done
#close the list
LIST="$LIST\""
echo $LIST
#on peut aussi éviter de passer par une liste de fichier et utiliser
# -i "concat:input1.mpg|input2.mpg|input3.mpg"
#generate an output file name
OUTFILE="GOPR${NUMBER}_completecut.MP4"
#generate the command
COMMAND="ffmpeg -i $LIST -ss $START_TIME -t $DURATION -c copy $OUTFILE"
echo "Do you want to execute the following command (y/n):"
echo $COMMAND
read line
if [ "$line" == "y" ]; then
#execute the command in the variable
eval "$COMMAND"
fi
=====Renommage de fichier=====
#!/bin/bash
#exemple d'utilisation pour renommer tous les .mp4 en .avi: chext mp4 avi
for file in *.$1
do
#\" pour gérer les fichiers avec des espaces
chaine=`echo "mv \"$file\" \"${file/$1/$2}\" "`
#affichage
echo $chaine
#execution
eval $chaine
done
=====Effacement automatique de plusieurs fichiers .html et dossiers _fichiers créés par firefox=====
#!/bin/sh
for fich in `ls *.html`
do
rep=`echo "$fich" | cut -d'.' -f 1 `
#echo $rep
rep2=`echo "$rep""_fichiers"`
#echo $rep2
#echo rm -r "$rep2"
#echo "rm $fich"
rm -r $rep2
rm $fich
done
=====Gestion de liens dynamiques=====
#/bin/bash
#(ne pas utiliser sh car l'IFS \n ne fonctionne pas!!!! )
#Auteur Bertrand VANDEPORTAELE 2013
#Ce script permet de construire une arborescence dans un dossier vide (définit par $DEST) dans laquelle des liens dynamiques
#vont pointer vers des fichiers/dossiers respectant la même arborescence mais sur plusieurs disques distincts
#Utile pour un média center avec plusieurs disques, on peut ainsi lister dans une même dossier le contenu des différents disque et naviguer comme s'il n'y avait qu'un disque
#exemple: 2 disques durs /media/HD1 et /media/HD2, contenant chacun les dossiers hd et 3D
#on cree sur ~/films/ les dossiers hd et 3D
#puis on crée des liens symboliques de tous les fichiers /media/HD1/hd et /media/HD2/hd vers ~/films/hd
# et de tous les fichiers /media/HD1/sd et /media/HD2/sd vers ~/films/sd
#pour cela régler
#DEST="~/films/"
#LISTCAT=$'hd\nsd\n'
#LISTDRV=$'/media/HD1\n/media/HD2\n'
# il faut que la partition destination supporte les liens dynamiques
#http://www.commentcamarche.net/faq/5027-comment-lire-un-fichier-ligne-par-ligne
#http://bash.cyberciti.biz/guide/$IFS
old_IFS=$IFS # sauvegarde de l'ancien séparateur de champ
IFS=$'\n' #le séparateur par defaut (espace) ne va pas car les noms de fichiers listés peuvent en contenir mais doivent être traités en une seule fois
#on règle un nouveau séparateur de champ, le caractère fin de ligne
#emplacement pour stocker les liens dynamiques, doit pointer sur un dossier vide car on va y effacer tout les contenus des
#dossiers catégories
DEST="/home/bvdp/films/"
#liste de noms de dossiers correspondant à des catégories
#il faut le $ au début pour que le \n soit interpreté correctement comme un IFS
LISTCAT=$'hd\nsd\n3D\nseries\n3Dsound\n'
#liste de noms de dossiers ou rechercher les catégories
LISTDRV=$'/media/HD2TO/\n/media/HD2TO2/\n/media/HD2TO3/\n/media/HD2TO4/\n/media/HD3TO1/\n/media/JY500GO\n'
echo destination=$DEST
#--------------------------------------------------------
#--------------------------------------------------------
#--------------------------------------------------------
#-------suppression des fichiers existants et création des dossiers si besoin---------------
rm $DEST/lnscript
for i in $LISTCAT
do
echo $i
rm $DEST/$i/*
mkdir $DEST/$i #au cas ou ils n'existeraient pas
done
#--------------------------------------------------------
for i in $LISTCAT
do
echo $i
#echo "next"
for j in $LISTDRV
do
echo $j
#echo "noxt"
for fich in `ls $j/$i`
do
echo "ln -s \"$j/$i/$fich\" \"$DEST/$i/$fich\"" >>$DEST/lnscript
echo $fich
done
done
done
#--------------------------------------------------------
bash $DEST/lnscript #éxecute le script de génération des liens symboliques
IFS=$old_IFS # rétablissement du séparateur de champ par défaut
--------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity vgaB1 is
port(clk50_in : in std_logic;
x : out std_logic_vector(9 downto 0);
y : out std_logic_vector(8 downto 0);
red_in : in std_logic;
green_in : in std_logic;
blue_in : in std_logic;
red_out : out std_logic;
green_out : out std_logic;
blue_out : out std_logic;
hs_out : out std_logic;
vs_out : out std_logic;
clk25_out : out std_logic;
inside_x : out std_logic;
inside_y : out std_logic);
end vgaB1;
architecture behavioral of vgaB1 is
signal clk25 : std_logic;
signal hcounter : integer range 0 to 800;
signal vcounter : integer range 0 to 521;
signal color: std_logic_vector(2 downto 0);
signal colorb: std_logic_vector(2 downto 0);
begin
-- generate a 25Mhz clock
process (clk50_in)
begin
if clk50_in'event and clk50_in='1' then
clk25 <= not clk25;
end if;
end process;
clk25_out<=clk25;
---------------------------------------------------
p2: process (clk25, hcounter, vcounter)
variable x: integer range 0 to 639;
variable y: integer range 0 to 479;
begin
-- hcounter counts from 0 to 799
-- vcounter counts from 0 to 520
-- x coordinate: 0 - 639 (x = hcounter - 144, i.e., hcounter -Tpw-Tbp)
-- y coordinate: 0 - 479 (y = vcounter - 31, i.e., vcounter-Tpw-Tbp)
x := hcounter - 144;
y := vcounter - 31;
if clk25'event and clk25 = '1' then
-- To draw a pixel in (x0, y0), simply test if the ray trace to it
-- and set its color to any value between 1 to 7. The following example simply sets
-- the whole display area to a single-color wash, which is changed every one
-- second.
if x < 640 and y < 480 then
-- colorbv := x mod 64; --il faut une puissance de 2 forcement pour le modulo
colorbv := x /64;
case colorbv is
when 0 => colorb<= "000";
when 1 => colorb<= "001";
when 2 => colorb<= "010";
when 3 => colorb<= "011";
when 4 => colorb<= "100";
when 5 => colorb<= "101";
when 6 => colorb<= "110";
when others => colorb<= "111";
end case;
--
-- with colorbv select
-- colorb<= "000" when 0,
-- "001" when 1,
-- "010" when 2,
-- "011" when 3,
-- "100" when 4,
-- "101" when 5,
-- "110" when 6,
-- "111" when others;
red_out <= colorb(0);
green_out <= colorb(1);
blue_out <= colorb(2);
else
-- if not traced, set it to "black" color
red_out <= '0';
green_out <= '0';
blue_out <= '0';
end if;
-- Here is the timing for horizontal synchronization.
-- (Refer to p. 24, Xilinx, Spartan-3 Starter Kit Board User Guide)
-- Pulse width: Tpw = 96 cycles @ 25 MHz
-- Back porch: Tbp = 48 cycles
-- Display time: Tdisp = 640 cycles
-- Front porch: Tfp = 16 cycles
-- Sync pulse time (total cycles) Ts = 800 cycles
if hcounter > 0 and hcounter < 97 then
hs_out <= '0';
else
hs_out <= '1';
end if;
-- Here is the timing for vertical synchronization.
-- (Refer to p. 24, Xilinx, Spartan-3 Starter Kit Board User Guide)
-- Pulse width: Tpw = 1600 cycles (2 lines) @ 25 MHz
-- Back porch: Tbp = 23200 cycles (29 lines)
-- Display time: Tdisp = 38400 cycles (480 lines)
-- Front porch: Tfp = 8000 cycles (10 lines)
-- Sync pulse time (total cycles) Ts = 416800 cycles (521 lines)
if vcounter > 0 and vcounter < 3 then
vs_out <= '0';
else
vs_out <= '1';
end if;
-- horizontal counts from 0 to 799
hcounter <= hcounter+1;
if hcounter = 800 then
vcounter <= vcounter+1;
hcounter <= 0;
end if;
-- vertical counts from 0 to 519
if vcounter = 521 then
vcounter <= 0;
end if;
end if;
end process;
end behavioral;