User-Specified Appointment Duration

I am looking to add an option for custom appointment durations. Ideally, the default duration should be 1 hour, but if the appointment is set to run longer they should be able to schedule their desired start/end times. Hopefully the solution to this will also include options in the backend if an admin were to need to make any changes.

Thank you.