user1792: I have a directory full of short video clips in .AVI format, and I want to remove the audio from all of them. I'm using Ubuntu 12.04.
I tried this command:
find -name '*.avi' -exec ffmpeg -i {} -an -vcodec copy {} \;

But while it did remove the audio, it also reduced each clip down to just a few frames. They are originally about 1 to 2 minutes long each, and should stay that way.
This might just be because ffmpeg can be buggy sometimes. Or maybe there's a better way of formatting the syntax.
In any case, whether it's with ffmpeg or a different command, is there a way I can reliably remove the audio from a bunch of clips without changing the video in any way?

user1871: I'd suggest installing WinFF, which is a GUI for ffmpeg, and comes with a job manager. 
Basically, perform the task for one video and verify it's ok, then populate the job queue with the remaining files, and it will adopt the last used encode parameters and process the queue.

user3476: I suspect you are having problems because you are trying to overwrite the input file with the output, ffmpeg just doesn't work that way. For a single file:
ffmpeg -i input.avi -an -c:v copy output.mkv

To do every file in a directory, you can use a for loop. For every `file.avi``in the working directory, this command will create an output called file-v.mkv:
for f in *avi; do ffmpeg -i "$f" -an -c:v copy "${f/%.avi/-v.mkv}"; done

To do the same thing recursively, you can indeed use find like so:
find . -type f -name *.avi -exec bash -c 'ffmpeg -i "$0" -an -c:v copy "${0/%.avi/-v.mkv}"' {} \;


1792: <p>I have a directory full of short video clips in .AVI format, and I want to remove the audio from all of them. I'm using Ubuntu 12.04.</p>

<p>I tried this command:</p>

<pre><code>find -name '*.avi' -exec ffmpeg -i {} -an -vcodec copy {} \;
</code></pre>

<p>But while it did remove the audio, it also reduced each clip down to just a few frames. They are originally about 1 to 2 minutes long each, and should stay that way.</p>

<p>This might just be because ffmpeg can be buggy sometimes. Or maybe there's a better way of formatting the syntax.</p>

<p>In any case, whether it's with ffmpeg or a different command, is there a way I can reliably remove the audio from a bunch of clips without changing the video in any way?</p>
 1871: <p>I'd suggest installing <a href="http://winff.org/html_new/" rel="nofollow">WinFF</a>, which is a GUI for ffmpeg, and comes with a job manager. </p>

<p>Basically, perform the task for one video and verify it's ok, then populate the job queue with the remaining files, and it will adopt the last used encode parameters and process the queue.</p>
 3476: <p>I suspect you are having problems because you are trying to overwrite the input file with the output, ffmpeg just doesn't work that way. For a single file:</p>

<pre><code>ffmpeg -i input.avi -an -c:v copy output.mkv
</code></pre>

<p>To do every file in a directory, you can use a for loop. For every `file.avi``in the working directory, this command will create an output called file-v.mkv:</p>

<pre><code>for f in *avi; do ffmpeg -i "$f" -an -c:v copy "${f/%.avi/-v.mkv}"; done
</code></pre>

<p>To do the same thing recursively, you can indeed use find like so:</p>

<pre><code>find . -type f -name *.avi -exec bash -c 'ffmpeg -i "$0" -an -c:v copy "${0/%.avi/-v.mkv}"' {} \;
</code></pre>
