使用 ffmpeg 批量剪辑 mp3

2019-11-06
标签: DIY

ffmpeg 是一款使用方便的音视频编辑软件,我们可以用它来裁切、拼接、转码输出到其他类型的音视频文件。本文列举一些常用的操作命令。

Mac/Linux 下批量转换

Mac/Linux 系统下,可以使用 Shell 脚本完成批量任务。

例子:下面的 shell 脚本可以批量转换 m4a 格式到 mp3:

# convert.sh
for i in *.m4a ; do
    ffmpeg -i "$i" -acodec libmp3lame "${i%.*}.mp3"
done

脚本执行后,当前目录下所有以 .m4a 结尾的文件都被转化为同名的 .mp3 。其中 acodec 参数是 “指定音频编解码器” 的意思,这里使用 lame 插件压缩 mp3

Windows 下批量转换

Window 系统下,可以使用批处理文件(batch file)完成批量任务。

例子:下面的批处理文件用于批量转换 DSD 格式文件到 mp3,并使用 lame 的 0 级 压缩质量

REM convert.bat
@echo off
for /r %%f in (*.dsd) do ffmpeg -i "%%f" -acodec libmp3lame -aq 0 "%%~nf.mp3"

如果要转换 *.daf 格式,只要把上面文件中的 (*.dsd) 改为 (*.daf)

ffmpeg 使用的时间格式

在 ffmpeg 的命令行中,接受 两种时间格式

  • 时分秒,比如: 00:01:05
  • 秒,比如:-5

去掉开头

去掉文件的开头部分,可以使用 -ss 或者 -sseof 参数开关。

以开头为参考点

使用 -ss 参数置于输出文件路径之前,参数值表示新的起点位置,用于改变输出文件的相对输入文件的开始位置:

$ ffmpeg -i infile -acodec copy -ss 00:00:05 outfile

上面这个命令将 infile 转换格式到 outfile ,同时将开始位置移动到第5秒钟位置,等于裁掉 infile 前面的5秒钟。

以结尾为参考点

还可以用 -sseof 参数相对文件末尾指定开始时间,用负值时间表示向前移动。

$ ffmpeg -i infile -acodec copy -sseof -25 outfile

上面这个命令将 infile 转换格式到 outfile,同时将开始位置移动到结束前的25秒钟,等于只保留最后25秒钟。

上面例子中的 -acodec copy 表示仅复制,不进行编解码。

去掉末尾

指定末尾的定位

使用 -to 参数置于输出文件路径之前,用于改变输出文件的结束位置:

$ ffmpeg -i infile -acodec copy -to 00:20:00 outfile

上面这个例子将 infile 转换格式到 outfile ,同时将 outfile 的结束位置设定为 infile 的20秒位置。

指定输出时长

使用 -t 参数置于输出文件路径之前,用于指定输出文件的总长度:

$ ffmpeg -i infile -acodec copy -t 00:19:55 outfile

上面这个例子将 infile 转换格式到 outfile ,同时将 outfile 的总长度设定为19分55秒。

ffmpeg 的特点

ffmpeg 在 自己的网站 上将自己的特点总结为:

FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge.

我把它大致翻译为:

FFmpeg是世界领先的多媒体框架,能够针对人或者电子设备产生的任何多媒体进行解码、编码、转码、复用、解复用、流化、滤镜和播放。它能支持的格式从最远古的时代,直至当今最前沿。

如果您对本站内容有疑问或者寻求合作,欢迎 联系邮箱邮箱已到剪贴板

标签: DIY

欢迎转载本文,惟请保留 原文出处 ,且不得用于商业用途。
本站 是个人网站,若无特别说明,所刊文章均为原创,并采用 署名协议 CC-BY-NC 授权。