If $||f||_p=0$ we're done. Assuming that $||f||_p>0$, we may as well assume that $||f_n||_p=||f||_p=1$.
Now, $(f_n+f_m)/2\to f$ weakly as $n,m\to\infty$, so $$\liminf\left|\left|\frac{f_n+f_m}{2}\right|\right|\ge 1;$$since $||f_n||_p=||f_m||_p=1$ it follows that
$$\lim\left|\left|\frac{f_n+f_m}{2}\right|\right|= 1.$$
It seems clear that some sort of uniform strict convexity now shows that $||f_n-f_m||_p\to0$. This is clear for $p=2$; alas I have to go to class, no time to try to work out the relevant inequality that shows this for other $p$. (But it must be right, based on the general principle that when $p=1$ and $p=2$ are different, the case $1<p<\infty$ is always like the case $p=2$...)
Edit: In fact $||f_n-f_m||_p\to0$ follows from Clarkson's Inequalities, which show that there exists an $r$ (equal to $p$ or to $p'$, depending on $p$), such that if $||f_n||_p=||f_m||_p=1$ then $$\left|\left|\frac{f_n+f_m}{2}\right|\right|_p^r+\left|\left|\frac{f_n-f_m}{2}\right|\right|_p^r\le1.$$
(There were problems with the first version of this post; getting the relevant inequality is trickier than I thought. But it's all better now...)