I have a whole bunch of text files, jpg and mp4 in a folder. I want the jpg and text files to be left alone. I want to compress all the mp4 using ffmpeg's -crf
argument with a value of 23
, to save disk space. Files should be overwritten in place.
I used @llogan answer here, and replaced .avi
with .mp4
but that does not work.
for f in *.mp4; do ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium \
-c:a aac -b:a 128k -movflags +faststart -vf scale=-2:720,format=yuv420p \
"encoded/${f%.avi}.mp4"; done
What would the for
loop be to convert mp4 to lower quality (-crf 23
), in place, without deleting and/or modifying any other files in the same working directory? I don't really want the other flags either, because I won't be doing resizing, youtube uploading, changing encoding speed, etc.
You just needed to change
"encoded/${f%.avi}.mp4"
to"encoded/${f%.mp4}.mp4"
or"encoded/${f%.*}.mp4"
:I removed all of the other stuff you didn't need. I assumed your input audio is already AAC so I used
-c:a copy
to enable stream copy mode which is like a copy and paste.-crf 23 -preset medium
are the default so you can remove those if you are fine with those values. Otherwise, see FFmpeg Wiki: H.264 for guidance on what-crf
and-preset
values to use.