How to decrease the number of queries with get_posts and ACF?

It’s everything OK with get_posts() since it creates the single WP_Query instance per call. You can check the query by creating that instance:

<?php
$test_query = new WP_Query(
    array(
        'post_type'      => 'post',
        'posts_per_page' => -1, // any number, does not matter
        'post__in'       => $ids, // should be an array!
    )
);

echo $test_query->request;

Adding 'meta_query' or other parameters will (not necessarily) increase query complexity (and, therefore, query time), but will not increase the number of queries.

It’s not enough information to find out why there are so many queries.

Adopted since OP’s comment (later on):

See. Load time depends on the number of queries (first) and their complexity (second) (or, otherwise, or, both). I can’t figure out why do you have so many queries when I don’t see what happens inside your Loop, inside while. I think you do the same query inside the Loop for each of 300 posts. Don’t do get_posts() inside the Loop. If you need some relations between posts, use taxonomies, they were designed for this purpose. Like tags or categories or custom movies, nappers, wooden toys, bicycles, etc. Do you see belonging on to another? Querieng custop fields was one of the most resource-eating things in WordPress. Use Taxonomies where queries are adopted to frequent use. Rethink the architecture excluding that plugin and come up with a new idea.