如何使用 FFmpeg 批量转换文件夹内的所有文件

FFmpeg 是一款功能强大的工具,可对音频和视频文件执行各种操作,如转码、过滤、编辑和流式传输。本文将向你展示如何使用 FFmpeg 批量转换或转换文件夹内的所有文件,并介绍一些优化转换过程和输出质量的技巧和窍门。

批量转换: 为何转换,何时转换?

想象一下,你的文件夹中有数百个视频或音频文件。也许它们的格式较老,也许它们太大,无法实际使用。手动转换每个文件至少会耗费大量时间。这就是批量转换的神奇之处。

批量转换可以让你一次性转换所有这些文件,无需人工干预。无论你的目标是统一格式,还是需要压缩文件以便存储,批量转换都能改变游戏规则。

  • 想改变文件格式,使其与特定设备或平台兼容。
  • 想缩小文件大小以节省存储空间或带宽。
  • 想对文件应用一些过滤器或特效,如裁剪、缩放、旋转或添加字幕。
  • 想合并或分割文件,或从中提取音频或视频流。

无论你的目标是什么,FFmpeg 都能通过一条命令行帮你实现。

掌握批量转换

安装 FFmpeg 后,你可以打开终端或命令提示符,并导航到文件所在的文件夹。要使用 FFmpeg 转换文件夹内的所有文件,需要使用 for 循环遍历每个文件,并将其作为 FFmpeg 命令的输入。for 循环的语法可能因操作系统和 shell 而异。

Windows

在 Windows 系统中,可以执行以下命令:

for %f in (*.*) do ffmpeg -i "%f" [options] "%~nf_converted.%~xf"

该命令将循环播放当前文件夹(用 .表示)中的所有文件,并使用 FFmpeg 进行转换。选项 -i 指定输入文件名,本例中为 %f。选项]部分用于指定各种转换参数,如输出格式、编解码器、比特率、分辨率、帧速率等。输出文件名由 %~nf_new.%~xf 组成,即带有 _new 后缀的原始文件名 (%~nf) 和原始文件扩展名 (%~xf)。

Linux 和 Mac

在 Linux 或 Mac 中使用以下命令也能实现同样的功能:

mkdir converted
for f in *.mp4; do ffmpeg -i "$f" "converted/${f%.mp4}.avi"; done

解释如下

  • mkdir converted: 这将为我们的输出文件创建一个名为 “converted “的目录。
  • for f in *.mp4:循环播放所有 .mp4 文件。
  • ffmpeg -i “$f” “converted/${f%.mp4}.avi”: FFmpeg 将转换每个文件,并将其存储在以 .avi 为扩展名的 “已转换 “文件夹中。

以下是一些常见示例,您可以直接在项目中使用。在运行之前,请确保已根据您的操作系统进行了适当修改。

将文件夹中的所有 MP4 文件转换为 MKV 格式

for %f in (*.mp4) do ffmpeg -i "%f" -c:v libx264 -c:a aac "%~nf_new.mkv"

这将使用 H.264/AVC 视频编解码器和 AAC 音频编解码器把文件夹中的所有 MKV 文件转换为 MP4 格式。由于我们没有指定任何转码参数,FFmpeg 将默认使用 CRF 速率控制模式,CRF 值 = 18。您可以根据自己的需要,将此命令扩展为使用 CBR、VBR 或封顶 VBR。

将文件夹中的所有 WAV 文件转换为 MP3 格式

for %f in (*.wav) do ffmpeg -i "%f" -b:a 128k -ar 44100 "%~nf_new.mp3"

上述命令行将把所有WAV 文件转换为 MP3,比特率为 128 kbps,采样率为 44.1 kHz。

将文件夹中的所有 JPG 文件转换为 PNG 格式

for %f in (*.jpg) do ffmpeg -i "%f" -q:v 80 -vf format=gray "%~nf_new.png"

这将拾取所有扩展名为 .jpg 的图像,并将其转换为具有 80% 质量和灰度模式的 PNG 格式。

使用通配符和正则表达式

还可以使用通配符 (*) 或正则表达式 (^) 来匹配多个文件扩展名或模式。为了让大家明白这一点,这里有一些直接的示例,您可以根据您的特定用例使用或修改它们。

将文件夹中的所有视频文件(MP4、AVI、MOV)转换为 MKV 格式

for %f in (*.mp4 *.avi *.mov) do ffmpeg -i "%f" -c:v libx264 -c:a aac "%~nf_new.mkv"

将文件夹中的所有音频文件(WAV、MP3、OGG)转换为 MP3 格式

for %f in (*.wav *.mp3 *.ogg) do ffmpeg -i "%f" -b:a 128k -ar 44100 "%~nf_new.mp3"

将文件夹中的所有图像文件(JPG、PNG、BMP)转换为 PNG 格式

for %f in (*.jpg *.png *.bmp) do ffmpeg -i "%f" -q:v 80 -vf format=gray "%~nf_new.png"

结论和注意事项

正如你所看到的,FFmpeg 是一款非常灵活的多功能工具,几乎可以处理任何文件格式和转换任务。不过,在使用 FFmpeg 转换文件夹内的所有文件时,也有一些注意事项和限制需要注意。以下是其中一些:

  • 在对整个文件夹运行批处理命令前,请先在一小部分有代表性的子文件夹中运行。如果该命令能满足您的需求,那么就可以在整个文件夹中执行该命令。
  • FFmpeg 不会检查输出文件是否已存在,并会覆盖它而不发出警告。如果想避免这种情况,需要使用额外的选项或工具,如 -n 或 if exist (https://ss64.com/nt/if.html)。
  • 转换后,FFmpeg 不会删除原始文件,而是将其保留在文件夹中。如果要删除它们,需要使用其他选项或工具,如 -y 或 del (https://ss64.com/nt/del.html)。
  • FFmpeg 不会显示转换的进度或状态,而是在后台静默运行。如果想查看进度或状态,需要使用其他选项或工具,如 -stats 或 pv (https://www.ivarch.com/programs/pv.shtml)。
粉丝福利, 免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓
  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值