Limit length of first excerpt in the loop

To determine where you are inside the loop in this filter, you will have to access the global main query. Like this:

add_filter ('excerpt_length', 'wpse268679_custom_excerpt_length');

function wpse268679_custom_excerpt_length ($length) {
  // access main query
  global $wp_query;
  // do this only for the main loop and the first post in the query
  if (is_main_query() && ($wp_query->current_post == 0))
    $length = 60;
  else
    $length = 30;
  return $length;
  }

The above will work for the main loop only. If you have a local loop, you cannot access the query globally, so you will have to build your own excerpt function, which passes the query in stead of the post. This isn’t that difficult. Like this:

 wpse268679_custom_excerpt ($query) {
   if ($query->current_post == 0)
     $excerpt = wp_trim_words ($query->post->post_excerpt, 60);
   else
     $excerpt = wp_trim_words ($query->post->post_excerpt, 30);
   return $excerpt;
   }

Beware that above will need tweaking, for instance to take into account cases where there is no excerpt defined (in which case you may want to use the post content to trim).