Mot-clé - multimédia

Fil des billets

mercredi 13 avril 2016

Imposition libre sous Linux avec PoDoFoImpose

L'imposition en imprimerie n'a rien à voir avec l'imposition fiscale ! Il fallait le rappeler en cette période de déclaration. L'imposition est une étape préparatoire avant impression qui consiste à placer les pages de l'ouvrage à imprimer sur les grandes feuilles qui passeront en presse.

De nombreuses solutions existent sous Linux pour l'imposition comme cela est rappelé sur cette page de la documentation de Scribus : https://wiki.scribus.net/canvas/PDF,_PostScript_and_Imposition_tools.

Je vais présenter ici le fonctionnement de PoDoFoImpose.

Sous Debian, PoDoFoImpose s'installe par

apt install libpodofo-utils

On peut alors appeler la commande :

podofoimpose source.pdf target.pdf plan.plan

où :

  • source.pdf correspond au fichier PDF contenant les pages de l'ouvrage initial
  • target.pdf correspond au fichier PDF à générer
  • plan.plan est une description textuelle du plan d'imposition

Toute l'intelligence se trouve donc dans le fichier plan.plan. Pour commencer à travailler, il suffit de le créer avec l'éditeur texte de son choix et de le débuter par les dimensions du support d'imposition :

$PageWidth=842.4
$PageHeight=597.6

L'unité est le Postscript Point : les dimensions annoncées ci-dessus sont celles d'un A4.

Ensuite, il convient d'ajouter une ligne pour chaque page que l'on souhaite imposer/placer sur le support d'imposition :

source page; target page; rotation; horizontal translation; vertical translation;

Par exemple, ce plan :

1; 1; 0; 0;0;
2; 1; 180; 280.8; 0;
3; 1; 0; 561.6; 0;
4; 2; 0; 0; 0;
5; 2; 180; 280.8; 0;
6; 2; 0; 561.6; 0;
  • place la première page du fichier source sur la première feuille sans changement
  • place la seconde page du fichier source sur la première feuille en effectuant une rotation de 180° et en la décalant horizontalement de 280.8 pts
  • place la troisième page du fichier source sur la première feuille en la décalant horizontalement de 561.6 pts
  • place la quatrième page du fichier source sur la seconde feuille

et ainsi de suite...

Pour des impositions plus compliquées, les valeurs absolues indiquées ici peuvent être remplacées par des expressions numériques (qui seront donc interprétées et calculées par podofoimpose) et il existe un mécanisme de boucle pour éviter la saisie manuelle de l'information si le plan d'imposition est très long ! Les détails sur ces fonctionnalités avancées sont disponibles ici.

Bonne imposition !

dimanche 20 mars 2016

Retailler les images en lot si et seulement si cela est nécessaire

mogrify -resize est un super outil pour retailler en lot des images. Cependant, il travaille sans distinguer les images qui ont besoin d'être retaillées et les autres.

Si on l'appelle avec cette ligne de commande en revanche, mogrify ne sera appelé que sur les images qui n'ont pas la taille requise !

identify -format '%w %h %i\n' *.jpg|awk '$1>1920||$2>1920{print$3}'|xargs mogrify -resize 1920x1920

Voilà bien des opérations évitées !

samedi 18 juillet 2015

Volumio sur Rasperry Pi avec Hifiberry Amp+ : une vraie petite chaîne Hifi connectée et pilotable à distance

Dans un précédent article, nous présentions le branchement d'Hifiberry Amp+ sur le Raspberry Pi (Pi B+ ou Pi 2). Allons un peu plus loin en équipant le Pi de Volumio.

Volumio en quelques mots

"a revolutionary audiophile music player" annonce fièrement le site de Volumio. Il faut admettre que l'outil est admirable pratique et bien construit. Au travers d'une interface graphique web, il permet de contrôler sa bibliothèque de morceaux audio, de gérer des listes de lecture et de contrôler la sortie audio du Pi. Volumio est intelligent et il sera capable de facilement indexer le contenu d'un disque dur (USB) branché sur le Pi ou de partages réseau (SMB/CIFS ou NFS). Pratique pour servir le contenu d'un petit serveur domestique qui porterait déjà toute la musique locale en son sein.

Screenshot_2015-07-18_16-14-16.png

Une installation sans histoire

  • On télécharge l'image de Volumio sur le site https://volumio.org/
  • On la déploie sur la carte SD à l'aide de la commande dd
  • On démarre le Pi

Et hop une machine au nom (attendu !) de volumio apparaît sur le réseau local.

Pour une utilisation basique, on pourra se contenter de s'y connecter à l'aide du navigateur à l'adresse http://volumio.local (ou http://volumio). A défaut, il faudra trouver son adresse IP (par exemple en regardant les périphériques connectés sur votre routeur local) et utiliser l'adresse IP jusqu'à avoir paramétré une bonne résolution de nom.

Accéder à Volumio en SSH

Rien de plus simple :

ssh root@volumio.local

et le mot de passe par défaut est... volumio.

Faire fonctionner Volumio avec l'Hifiberry Amp+

Ce n'est pas très compliqué - presque plus facile que sur une Raspbian classique !

On désactive le système audio par défaut (via le Jack) en commentant la ligne suivante dans /etc/modules :

snd_bcm2835

On ajoute la ligne suivante dans /boot/config.txt :

dtoverlay=hifiberry-amp

puis ceci dans /etc/asound.conf à destination d'Alsa :

dtoverlay=hifiberry-amp

Et le tour est joué.

On peut alors rebooter le système Volumio et le son sort désormais de l'amplificateur Amp+.

On remarquera cependant assez vite que le contrôle de volume ne répond pas comme attendu. Pour corriger ce point, j'ai modifié comme suit la section audio_output de /etc/mpd.conf

audio_output {
                 type           "alsa"
                 name           "Output"
                 device         "hw:0,0"
                 mixer_control  "Master"
                 mixer_device   "hw:0"
                 mixer_index    "0"
                 dop    "no"
}

et on redémarre MPD (/etc/init.d/mpd restart).

Fixer le volume par défaut au redémarrage du Pi

Pour éviter que le système ne redémarre avec un son trop fort, j'ai choisi le volume médian satisfant à l'aide d'alsamixer puis

alsactl store

Bonne écoute musicale ! La grosse chaîne Hifi du passé peut être remplacée par le petit Pi économe et discret !

Transformer un Rasperry Pi en chaîne Hifi avec Hifiberry Amp+

D'aucuns trouveront la sortie audio Jack du Raspberry Pi un peu limitée... et pour cause ! Transformer le Pi en véritable ampli est attractif... Et c'est heureusement possible grâce au Hifiberry Amp+ vendu par la société helvète Hifiberry.

amp_plus-300x300.jpg

L'Hifiberry Amp+ se branche sur les pins GPIO du Raspberry Pi (B+ ou 2). Il permet alors de brancher les enceintes de son système Hifi sur le Pi.

Paramétrage du Pi

Dans /etc/modprobe.d/raspi-blacklist.conf, on peut commenter ces lignes pour ne plus 'blacklister' ces modules :

blacklist i2c-bcm2708
blacklist snd-soc-pcm512x
blacklist snd-soc-wm8804

Puis, dans /etc/modules, on commente également cette ligne :

snd_bcm2835

Ensuite, dans /boot/config.txt, on ajoute cette ligne en fin de fichier :

dtoverlay=hifiberry-amp

Enfin, dans /etc/asound.conf, on ajoute ces quelques lignes :

pcm.!default  {
 type hw card 0
}
ctl.!default {
 type hw card 0
}

Et voilà le Pi est alors capable d'émettre du son au travers de son amplificateur. Il ne reste plus qu'à brancher des enceintes pour profiter d'une musique de qualité !

Aller plus loin en transformant le Pi en chaîne Hifi connectée

On peut alors installer sur le Pi tout système de son choix pour une gestion facilitée de l'audio. On pourra par exemple déployer MPD ou Volumio. C'est l'objet d'un prochain article.

samedi 1 novembre 2014

Xournal, génial pour annoter des PDFs

Xournal est un très simple et très pratique outil pour annoter des PDFs. Indispensable aujourd'hui quand nous recevons des formulaires par dizaines sous format PDF ou qu'il est habituel de collaborer sur des documents PDF.

L'emploi est fort simple : on ouvre le PDF avec Xournal, on utilise l'un des outils d'écriture ou de dessin (crayon, surligneurs, règle...) pour annoter puis on exporte le nouveau PDF.

Xournal.png

Xournal est disponible au téléchargement ici : http://xournal.sourceforge.net/. Sur Linux, vous le trouverez sans doute dans votre système de paquets, sur Windows, vous pourrez télécharger la petite archive contenant l'exécutable et ses dépendances.

Souhaitant déployer l'outil sur tous les postes informatiques (Windows) de mon entreprise, j'ai fabriqué un installateur simple pour l'outil à l'aide de NSIS. Par défaut, les installateurs de NSIS acceptent d'être appelés en mode silencieux à l'aide du paramètre "/S" et l'installateur généré peut être utilisé pour un déploiement en masse avec un outil comme Updatengine.

Télécharger l'installateur

Testé fonctionnel sur Windows 7 32 bits et 64 bits. xournal-0.4.8-win32-installer.exe

Le code de génération de l'installateur avec NSIS :

!define APPNAME "Xournal"
!define DESCRIPTION "Annotate PDF"
# These three must be integers
!define VERSIONMAJOR 0
!define VERSIONMINOR 4
!define VERSIONBUILD 8
!define INSTALLSIZE 7233
 
RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on)
 
InstallDir "$PROGRAMFILES\${APPNAME}"
 
# This will be in the installer/uninstaller's title bar
Name "${APPNAME}"
Icon "xournal.ico"
outFile "xournal-0.4.8-win32-installer.exe"
 
!include LogicLib.nsh
 
# Just 2 pages - install location and installation
page directory
Page instfiles
 
!macro VerifyUserIsAdmin
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights on NT4+
        messageBox mb_iconstop "Administrator rights required!"
        setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
        quit
${EndIf}
!macroend
 
function .onInit
	setShellVarContext all
	!insertmacro VerifyUserIsAdmin
functionEnd
 
section "install"
	# Files for the install directory - to build the installer, these should be in the same directory as the install script (this file)
	setOutPath $INSTDIR
	# Files added here should be removed by the uninstaller (see section "uninstall")
	file "xournal.exe"
	file "xournal.ico"
	file "README.txt"
	file "*.dll"
	file /r "etc"
	file /r "html-doc"
	file /r "lib"
	file /r "pixmaps"
	file /r "share"
	# Add any other files for the install directory (license files, app data, etc) here
 
	# Uninstaller - See function un.onInit and section "uninstall" for configuration
	writeUninstaller "$INSTDIR\uninstall.exe"
 
	# Start Menu
	createDirectory "$SMPROGRAMS\${APPNAME}"
	createShortCut "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk" "$INSTDIR\xournal.exe" "" "$INSTDIR\xournal.ico"
	createShortCut "$SMPROGRAMS\${APPNAME}\Uninstall ${APPNAME}.lnk" "$INSTDIR\uninstall.exe" "" ""
 
	# Registry information for add/remove programs
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME} - ${DESCRIPTION}"
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$"$INSTDIR\uninstall.exe$""
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "QuietUninstallString" "$"$INSTDIR\uninstall.exe$" /S"
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" "$"$INSTDIR$""
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayIcon" "$"$INSTDIR\xournal.ico$""
	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayVersion" "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}"
	WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "VersionMajor" ${VERSIONMAJOR}
	WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "VersionMinor" ${VERSIONMINOR}
	# There is no option for modifying or repairing the install
	WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoModify" 1
	WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "NoRepair" 1
	# Set the INSTALLSIZE constant (!defined at the top of this script) so Add/Remove Programs can accurately report the size
	WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "EstimatedSize" ${INSTALLSIZE}
sectionEnd
 
 
# Uninstaller
function un.onInit
	SetShellVarContext all
 
	#Verify the uninstaller - last chance to back out
	MessageBox MB_OKCANCEL "Permanantly remove ${APPNAME}?" IDOK next
		Abort
	next:
	!insertmacro VerifyUserIsAdmin
functionEnd
 
section "uninstall"
	# Remove Start Menu launcher
	delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
	delete "$SMPROGRAMS\${APPNAME}\Uninstall ${APPNAME}.lnk"
	# Try to remove the Start Menu folder - this will only happen if it is empty
	rmDir "$SMPROGRAMS\${APPNAME}"
 
	# Remove files
	delete $INSTDIR\xournal.exe
	delete $INSTDIR\xournal.ico
	delete $INSTDIR\README.txt
	delete $INSTDIR\*.dll
	rmDir /r $INSTDIR\etc
	rmDir /r $INSTDIR\html-doc
	rmDir /r $INSTDIR\lib
	rmDir /r $INSTDIR\pixmaps
	rmDir /r $INSTDIR\share
 
	# Always delete uninstaller as the last action
	delete $INSTDIR\uninstall.exe
 
	# Try to remove the install directory - this will only happen if it is empty
	rmDir $INSTDIR
 
	# Remove uninstaller information from the registry
	DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}"
sectionEnd

dimanche 14 avril 2013

Encoder des vidéos en webm en lots

Firefogg est un merveilleux outil pour convertir une vidéo vers le format WebM (un bon format libre et efficace, quelques références ici et ). Firefogg s'installe comme une extension de Firefox depuis cette page : http://firefogg.org/ et on accède alors à l'outil de conversion depuis le menu 'Tools' et 'Make Web Video'.

Les options sont assez faciles à prendre en main : les plus timorés resteront avec les profils de réglage par défaut tandis que les plus avertis affineront les paramètres selon leurs bons désirs.

Toutefois, si vous devez convertir des dizaines de vidéos, alors cette solution est un peu pénible car ne permettant pas le traitement en lots de plusieurs vidéos.

On peut alors se tourner vers les outils ffmpeg pour automatiser tout cela.

La commande suivante :

for i in *.dv; do avconv -i $i -codec:v libvpx -quality best -b:v 1500k -vf scale=-1:-1 -filter:v yadif -threads 4 -an "out-$i".webm ; done

parcourra le dossier courant et convertira tous les fichiers *.dv en obéissant aux contraintes suivantes :

  • -codec:v libvpx l'encodage se fera vers le format webm
  • -quality best avec la meilleure qualité possible
  • -b:v 1500k avec un débit maximal de 1.5Mbit/s
  • -vf scale=-1:-1 en ne modifiant pas les ratios d'image initiaux
  • -filter:v yadif en désentrelaçant les images (i.e. en supprimant l'effet crénelé qui existe si votre vidéo a par exemple été filmée avec une caméra DV d'il y a quelques temps)
  • -threads 4 en utilisant la pleine puissance des 4 coeurs de l'ordinateur
  • -an en supprimant la bande son (si on souhaite la conserver, on pourra remplacer -an par -codec:a <codec audio>)

Et voilà le tour est joué !

lundi 11 mars 2013

PDF, en RVB ou bien en CMJN ?

Plusieurs manières existent pour décrire les couleurs : je le découvrai plus précisémment tout récemment en échangeant avec un imprimeur pour la réalisation des brochures de l'Opéra de Quat'Lieux. L'imprimeur me réclama en effet mon PDF en CMJN (Cyan-Magenta-Jaune-Noir ou CMYK pour les anglophones) au lieu du plus classique RVB (Rouge-Vert-Bleu ou RGB pour les anglophones).

Pour connaître l'encodage colorimétrique d'une image (ou d'un PDF), je découvris la commande suivante (elle fait partie du paquet ImageMagick) :

identify -verbose image.jpg

qui retournera (parmi d'autres infos) un champ :

Colorspace: sRGB

Pour effectuer la conversion du PDF de l'espace RVB vers l'espace CMJN, j'utilisai alors la commande suivante :

gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress \
-sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK \
-sOutputFile=output.pdf input.pdf

Dans mon cas, l'argument -dPDFSETTINGS=/prepress était important pour éviter une re-compression du PDF et donc une perte de qualité.

mercredi 29 août 2012

Convertir des fichiers MIDI...

Timidity, la boîte à outil linuxienne relative aux fichiers MIDI arrive à notre rescousse.

timidity -Ow *.mid

va créer tous les fichiers WAV correspondants.

Et ensuite, on peut utiliser l'outil de son choix pour les conversions, par exemple :

ffmpeg -i fichier.wav fichier.mp3

Si on souhaite traiter tous les fichiers d'un dossier, la variante de la ligne de commande sera :

for file in *.wav; do `ffmpeg -i "$file" "$file.mp3"`;done

Que du bonheur la ligne de commande !