The wp_insert_post_data filter is the right approach. I would do something like this:
add_filter( 'wp_insert_post_data', 'some_handler' );
function some_handler( $data )//$data is an array of sanitized post data
{
//do some conditional checking...
if ( ! isset( $_POST ) ) {//the request to insert post data wasn't done by a user
return $data;
}
//don't bother doing anything to any post type other than 'post'
if ( $data['post_type'] != 'post' ) {
return $data;
}
//there probably needs to be a bunch of other conditional checks made...
//but after that, check for which author is posting:
if ( $data['post_author'] == 19 ) {
return $data;
} else {
$data['post_author'] = 20;
return $data;
}
}