Choisir un objectif a focale fixe

Les raisons pour investir dans une focale fixe ne manquent pas (encombrement et poids réduit, meilleure qualité optique, etc.) mais de quelle longueur ? Question épineuse qui dépend évidemment beaucoup de type de photo que vous faite. Mais quid si vous n’avez pas de style particulier clairement identifiable ?

Une méthode recommandée sur les forums consiste a bloquer son zoom sur la focale que l’on convoite et tester pendant une période donnée si on est confortable avec le cadrage obtenu. Cependant je ne suis pas convaincu par cette méthode. Les humains on une tendance naturelle a s’adapter au “crap-factor” d’un équipement et à composer avec. Une méthode plus satisfaisante est de choisir un objectif dont la focale est la plus proche de celle que l’on utilise déjà le plus souvent. Comment faire ? Avec les données exif bien sûr !

Du coup je vous propose deux petits scripts python utilisant exiftool :

#!/usr/bin/python
import subprocess
import sys

directory = sys.argv[1]
p1 = subprocess.Popen("exiftool -r -T -filename -focallength -ext JPG "+directory+" | awk '{ print $2}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
focal_length = [];

# Normalize value
limits = [17.0, 24.0, 28.0, 35.0, 50.0, 70.0, 85.0, 105.0, 135.0, 150.0, 180.0, 200.0, 210.0]
for line in p1.stdout.readlines():
  fl = float(line)
  diffs = dict([(abs(x - fl), x) for x in limits])
  focal_length.append(diffs[min(diffs)])

from collections import defaultdict
data=defaultdict(int)
for i in focal_length:
  data[i]+=1

print("Focal Length tNumber of photo")
print('===============================')
for w in sorted(data, key=data.get, reverse=True):
  print(str(w)+" t"+str(data[w]))

Voici le genre de sortie que l’on obtient :

Focal Length Number of photo
===============================
50.0 185
35.0 169
40.0 123
30.0 106
24.0 96
17.0 91
28.0 72

C’est pas mal mais pas très visuel. Mais heureusement gnuplot viens a notre rescousse :

#!/usr/bin/python
import subprocess
import sys
import time

directory = sys.argv[1]
p1 = subprocess.Popen("exiftool -r -T -filename -focallength -ext JPG "+directory+" | awk '{ print $2}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
focal_length = [];

for line in p1.stdout.readlines():
  fl = float(line)
  focal_length.append(fl)

from collections import defaultdict
data=defaultdict(int)
for i in focal_length:
  data[i]+=1

sorted(data.values())
text_file = open("/tmp/focal_length_plot_data.txt", "w")
for w in data:
  text_file.write(str(w)+" t"+str(data[w])+"n")

text_file.close()
p2 = subprocess.Popen('gnuplot -p -e "plot '/tmp/focal_length_plot_data.txt' using 1:2 with lines"', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
time.sleep(5)
p3 = subprocess.Popen("rm -f /tmp/focal_length_plot_data.txt", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

Dans mon cas le 35mm f/2 IS USM s’impose.

Dernière mise à jour le févr. 06, 2014 12:25 UTC