Marco Pagot (voice: Michael Keaton in the Disney English dub), a WWI pilot who has lost faith in humanity and acquired a curse that turned him into a pig, is now known as Porco Rosso. Porco has become an airborne bounty hunter, offering his services from a small island hideout for a fee. When word comes that some sea pirates have kidnapped a group of girls from a cruise liner, Porco goes after the pirates, severely damaging their aircraft. Porco strikes a deal with them: turn over the girls and half of the loot collected, and he'll let the pirates go. Being desperately in need of money, the pirates comply, and Porco returns the girls to the cruise liner.
After the rescue, Porco goes to the Hotel Adriano, where he talks with Gina (voice: Susan Egan), an old friend who owns the hotel and sings in the club. While there, Porco meets an American pilot named Donald Curtis (voice: Cary Elwes), who has been hired by a local band of sea pirates.
Afterwards, Porco and Gina sit down to a meal, reminiscing about the old days. Looking at her wall, Porco notices a photo of several younger persons, with the face of one of the young men scratched out. Porco tells Gina of his wish that the photo be taken down, but she refuses, saying that even with the scratched-out face, it's the only known photo of Marco when he was still human.
Porco returns to his island hideaway. Over the radio, he hears that several bands of sea pirates have pooled their resources and robbed another cruise liner, delivering the caveat that they are planning to get Porco next. Porco decides to head off to Milan to enjoy the scenery and get his plane repaired. However, on the way there, an impromptu dogfight breaks out when Curtis spies Porco; Porco's plane is heavily damaged and the engine gives out entirely. Porco saves the body of his plane by hiding it under the greenery on a small island. Believing that Porco has been killed, Curtis flies off.
Porco has the plane transported to Milan. He calls Gina to let her know he is all right since reports have surfaced that Curtis shot him down. Gina tries to get Porco to change his mind about Milan, as the Italian authorities have a warrant out for his arrest. Porco ignores her concern. He rings up an old friend named Piccolo (voice: David Ogden Stiers) who can repair his plane. Upon arrival at the Piccolo SPA workshop, Porco finds that all of the men that Piccolo worked with (both family and friends) have gone off to find work elsewhere. Piccolo's new staff is his granddaughter Fio (voice: Kimberly Williams-Paisley) and the female relatives of his former workforce.
Porco is at first against having someone as inexperienced as Fio redesign and work on his plane, but he relents when she displays a natural enthusiasm and knowledge for planes and design work.
Eventually, the plane is completed, but word has reached Porco that the Italian police know he's there and intend to arrest him. Porco tries to make an early-morning escape, but is thrown for a loop when Fio invites herself along, intending to make sure the plane functions perfectly and to make any necessary adjustments.
Porco and Fio escape in a hair-raising take-off from a canal. They make their way to Porco's island hideaway. However, the sea pirates have already arrived with intent to hurt Porco and smash his plane. Surprisingly, Fio talks them out of their plan, speaking of honor among sea pirates. The meeting is interrupted when Curtis climbs down the cliff to challenge Porco to a duel. Upon seeing Fio, he claims that he wants to marry her if he wins. Fio (without Porco's consent) agrees, but only under the stipulation that if Porco wins, Curtis pays the fee for Porco's plane and repair costs.
The sea pirates leave, and Porco and Fio settle down for the evening, with plans for the duel the next day. As she lies in a sleeping bag, Fio looks at Porco, and for a few moments, glimpses him in human form. However, when she calls to Porco, his face reverts to his porcine features. Fio asks Porco about the curse, but he doesn't reveal much. Fio playfully suggests that maybe if she kisses him, he'll turn human again, as in the story of the princess and the frog. Porco dismisses this and tells Fio to go to sleep. She agrees to do so if Porco will tell her a story.
Porco relates a story in which he and several of his comrades (one of them Gina's late husband) engaged in a dogfight. During the battle, Porco found himself shrouded in a cloud bank. When his plane emerged above the clouds, it was not under his control. He saw a massive procession of different airplanes high above, all flying together in a tight group. As he watched, the downed enemy planes, as well as those of his downed comrades and Gina's husband, drifted up and joined the procession. Porco called to his friend and tries to go after him, but the controls on his plane refused to move. Eventually, the plane drifted down below the clouds, and he lost consciousness; when he came to he found himself over the ocean.
The next day, the sea pirates host the air duel between Porco and Curtis. Numerous persons from around the Mediterranean have congregated on a small island where members of the pirate gangs are taking bets on the two combatants.
Finally, the duel gets underway. However, while Curtis attempts to shoot down Porco, Porco's code of not firing on another pilot keeps him from easily taking down Curtis. After some time, Porco finally has a bead on Curtis' engine, but finds his guns jammed. Curtis has also run out of ammunition, and soon the two pilots are throwing whatever they can at the other and yelling.
Finally, the two land their planes and engage in a fistfight to settle the score. During the fight, Curtis brings up Gina and how she's been waiting for Porco. Finally, the two knock each other out and fall into the water. Just then, Gina arrives and berates Marco for trying to ruin Fio's life as well. This seems to give Porco the will to get up, winning the fight.
Gina tells the rest of the bystanders that the Italian Air Force has heard of what is going on, and are sending their planes to intercept. The majority of the spectators flee the island and Porco puts Fio in Gina's plane, despite Fio's protests. As the plane takes off, Fio leans out and kisses Porco. With only Porco and Curtis left, the two agree to work together to lead the Italian Air Force away, but not before Curtis notices something different about Porco's face.
Fio ties up the loose ends in a voice-over: