我在一个文件夹中有一大堆文本文件、jpg 和 mp4。我希望 jpg 和文本文件保持不变。我想使用 ffmpeg 的-crf
参数(值为 )压缩所有 mp4 23
,以节省磁盘空间。文件应就地覆盖。
我使用了@llogan 答案这里,并替换.avi
为.mp4
,但这不起作用。
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
for
在不删除和/或修改同一工作目录中的任何其他文件的情况下,将 mp4 转换为较低质量()的循环是什么-crf 23
?我也不想要其他标志,因为我不会进行调整大小、youtube 上传、更改编码速度等操作。
答案1
您只需要更改"encoded/${f%.avi}.mp4"
为"encoded/${f%.mp4}.mp4"
或"encoded/${f%.*}.mp4"
:
mkdir encoded
for f in *.mp4; do ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a copy -movflags +faststart "encoded/${f%.*}.mp4"; done
我删除了你不需要的所有其他内容。我假设你的输入音频已经是 AAC,所以我曾经-c:a copy
启用流复制类似于复制和粘贴的模式。
-crf 23 -preset medium
是默认值,因此如果您对这些值满意,可以将其删除。否则,请参阅FFmpeg 维基:H.264以获得关于使用什么-crf
和值的指导。-preset