Front end post form validation

Using isset isn’t the best option, because when you submit the form the post variables will still be set, just to null. You should check if the values are null. Also you are echoing the validation error messages, when you should be assigning them to a variable and returning the variable, then outputting the returned value in the template.

function video_process_form( $query ) {
    global $error_output; 
    if ( $query->is_page( 'submit-video' ) && isset( $_POST['title'] ) ) {

        if ( ! function_exists( 'wp_handle_upload' )) {
            require_once(ABSPATH . "wp-admin" . '/includes/image.php');
            require_once(ABSPATH . "wp-admin" . '/includes/file.php');
            require_once(ABSPATH . "wp-admin" . '/includes/media.php');
        }

        $file = $_FILES;

        // Do some minor form validation to make sure there is content
        if ($_POST['title'] != null) {
            $title =  $_POST['title'];
        } else {
            $error_output .= 'Please enter a game  title<br/>';
        }

        if ($_POST['description'] != null) {
            $description = $_POST['description'];
        } else {
            $error_output .= 'Please enter the content<br/>';
        }

        if ($_POST['video_url'] != null) {
            $video_url = $_POST['video_url'];
        }
        $tags = $_POST['post_tags'];

        // Add the content of the form to $post as an array
        $new_post = array(
            'post_title'    => $title,
            'post_content'  => $description,
            'tags_input'    => array($tags),
            'post_category' => array(12),
            'post_status'   => 'publish',           // Choose: publish, preview, future, draft, etc.
            'post_type' => fod_videos  // Use a custom post type if you want to
        );

        // If No Errors, Save Post and Redirect //
        if ($error_output == null) {
            $pid = wp_insert_post($new_post);
            update_post_meta($pid,'video_code',$video_url);
            wp_redirect( get_permalink($pid)); 
        // If Errors, Return Errors for Display in Template //
        } 
    }
    do_action('wp_insert_post', 'wp_insert_post');
}
add_action( 'pre_get_posts', 'video_process_form' );  

Then in your template file you can do:

global $error_output;
if ($error_output != null) {
    echo '<div class="errorbox">' . $error_output . '</div>';
}