如何使用 FFmpeg 批量转换文件夹内的所有文件
如何使用 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)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)