Slugs can be handled pretty easily, just use a mutator:
public function setMySlugAttribute($value)
{
$this->attributes['my_slug'] = \Str::sluggable($value) ;
}
If you want, you can throw in validation or whatever, or use a different field, whatever you want. You can throw it in a trait to reuse.
I've never used a package to handle slugs.
Adding a related model is also pretty trivial and there is an example in the docs.
For dynamically adding rows, that is pretty trivial as well and is javascript. Google "jquery add remove rows"
Multiple video uploads, just do a foreach and loop over them.