Here is what we do;
1) Pick-up a collection of User Stories that belong to the prioritized list of Epics.
2) Take one story that everyone in the team understands very well and are absolutely clear its deliverable.
3) To this story, assign any 1 number from the Fibonacci series (1, 2, 3, 5, 8, 13, 21, 34). Now this story is a bench-mark to estimate all other stories you have.
4) Let us suppose, you choose #3 for the 1 story that everyone understands very well. This means, the story points for the story is 3.
5) Take another story and ask everyone, if the first one is 3 in size, then what is the second one?
6) Take voting, bring everyone onto one page if required and finalize the size of the second story (a number in Fibonacci series), in other words story points for the second story.
7) Move on to another story and finish this estimation of size, always in comparison to the first story, on all stories that are ready for estimation.
8) Pick-up stories one-by-one in the order of priority for development and testing.
9) By the end of the sprint, 2 weeks or 3 weeks whatever, sum the story points on the stories that you have completed development.
10) Now, that sum is the capacity for your second sprint. Most teams prefer to call the first sprint as sprint 0 where capacity was Not known and call the second sprint as sprint 1.
11) After the end of second sprint, repeat the summing process and take an average of sums from first and second sprints.
12) Now, that average is the capacity for your next sprint.
13) After few sprints follow practices like (i ) change the bench-mark story, (ii) calculate average from previous 4 sprints only, (iii) add more factors to the calculation of sprint capacity based on changing team size, growing team knowledge and experience in the project etc.
14) At any point in time, if you want to give a likely release date to customer for a bunch of epics and their related stories; ( i) calculate the total of all story points on all the related stories, (ii) based on current sprint capacity, calculate the number of sprints required to complete the development, (iii) add additional days for UAT or other phases if any (non-pure-agile) and you get the likely release date.