原始问题
我希望能够从现有的MP3文件生成一个新的(完全有效的)MP3文件,用作预览 - 先试后买的风格.新文件应仅包含曲目的前n秒.
现在,我知道我可以在传送文件时在n秒(从比特率和标题大小计算)"切断流" ,但这有点脏,并且在VBR轨道上是真正的PITA.我希望能够生成一个合适的MP3文件.
任何想法?
答案
这两个mp3split和ffmpeg都是很好的解决方案.我选择了ffmpeg,因为它通常安装在Linux服务器上,也很容易用于Windows.这里有一些更好的命令行参数,用于使用ffmpeg生成预览
-t <seconds> 在指定的秒数后切断-y 强制文件覆盖-ab <bitrate>设置比特率,例如-ab 96k-ar <rate Hz>设置采样率,例如-ar 22050为22.05kHz-map_meta_data <outfile>:<infile> 将跟踪元数据从infile复制到outfile而不是设置-ab和-ar,您可以像Tim Farley建议的那样复制原始曲目设置:
-acodec copy在这个问题之后,我决定使用ffmpeg来裁剪MP3.在另一个问题上,我发现了这种做法:
ffmpeg -t 30 -acodec copy -i inputfile.mp3 outputfile.mp3
Run Code Online (Sandbox Code Playgroud)
问题是我不想裁剪前30秒,我想从x到x + n裁剪,比如30s到100s.我该怎么做呢?
我正在为ffmpeg读这个人,但这并不是很简单,特别是因为我刚刚发现了ffmpeg并且我不熟悉音频/视频编辑软件,所以任何指针都会受到赞赏.
我试图使用以下命令与最新的ffmpeg构建来删除我的.mp3文件中的沉默:
ffmpeg -i SILENCE.mp3 -af silencedetect=n=-50dB:d=1 -y -ab 192k SILENCE_OUT.mp3
Run Code Online (Sandbox Code Playgroud)
但是,会生成以下输出:
ffmpeg version N-66154-g1654ca7 Copyright (c) 2000-2014 the FFmpeg developers
built on Sep 5 2014 22:10:38 with gcc 4.8.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-lib
modplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrw
b --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge
r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --en
able-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
--enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-
libx265 --enable-libxavs --enable-libxvid --enable-decklink …Run Code Online (Sandbox Code Playgroud) 我正在开发一个 C# WPF 应用程序,它将一组单词(大约 17,000 个单词)组合在一起,并生成一个与 mp3 文件匹配的播放列表(每个 mp3 文件都是一个单词)。
目前,每个 mp3 文件在其波形结束时都有 1 秒到 30 秒之间的随机静音。
我希望能够以编程方式从文件末尾删除静音波。
使用 NAudio for .NET 如何删除 mp3 文件末尾的静音波?