Чтобы использовать переменные в строковых литералах, вы должны либо использовать двойные кавычки:
$id = 39; shell_exec("convert Q$id.pdf Q$id.png");
или объединить их:
$id = 39; shell_exec('convert Q'.$id.'.pdf Q'.$id.'.png');
Я бы порекомендовал второй способ, так как он более читабелен при использовании подсветки синтаксиса.
Или даже лучше, убедитесь, что это всегда десятичная дробь:
$id = 39; shell_exec(sprintf('convert Q%1$d.pdf Q%1$d.png', $id));
Это также покажет вам, какие переменные используются для построения команды.