Outils pour utilisateurs

Outils du site


scriptshell

Ceci est une ancienne révision du document !


Concaténation de vidéos GOPRO

concat.sh
#!/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

cre.sh
#/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  
test.vhdl
--------------------------------------------------------------------------------
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;
scriptshell.1508180791.txt.gz · Dernière modification : 2017/10/16 21:06 de bvandepo