Dateiendungen sind in der Regel für den Menschen, damit dieser weiss, was drin ist. Insofern ist die Dateiendung egal.
Bei ffmpeg ist es jetzt so, dass du damit sehr viele unterschiedliche Dinge machen kannst und du ihm deshalb auch *genau* sagen musst, was du tun willst. ffmpeg kann ja keine Gedanken lesen. 
ffmpeg -i "input.mp4" -c:v copy -f h264 test.avc
ist gleich zu:
ffmpeg -i "input.mp4" -c:v copy test.h264
Im ersten Fall sagst du ffmpeg per -f Parameter, dass du einen h264 raw Stream erstellen willst.
In der zweiten Zeile errät ffmpeg anhand der Dateiendung .h264, welches Format er verwenden soll. Und die im bekannte Dateiendung für h264 raw streams ist nun mal .h264
Die Dateiendung .avc ist ihm unbekannt, also bricht er mit einen Fehler ab.