MP3の最後に静寂を追加する


12

Linuxで、MP3の最後に一定期間の無音を追加する方法を知っている人はいますか?たとえば、MEncoder、FFmpegなどを使用していますか?

スクリプト化されてサーバーで実行されるため、コマンドラインである必要があります。

私はこれをググググして、私ができる最善のことはSoXpad関数を使用することですが、MP3では機能しません。

私はそれをWAVに変換し、SoXを使用してから再びMP3に変換し、メタデータ(期間を差し引いたもの)をオリジナルから新しいMP3にコピーできます。しかし、そのためのスクリプトを作成する前に、1ヒットの解決策があるかどうかを確認したいと思いました。


2
私はあなたがこのような何かを達成することができると思うmp3DirectCutサウンドデータを再圧縮回避(Windowsのみ、彼らはそれがワインの下でのLinuxとの互換性だと言います)、。MP3-> WAV-> MP3とすると、すでにMP3で圧縮されたデータストリームが再圧縮され、途中で多くの品質が失われます。
画期的な

ありがとう。コマンドラインからWineを介してWindowsソフトウェアを実行できますか?私は私たちのサーバーにWineをインストールするのをためらっているので、できればWineのソリューションを避けたいと思います。
Max Williams

うーん、まだ持っていない場合は、Wineルートを避けたいと思うかもしれません。Wine自体はかなり大きなダウンロードであり、単純なMP3カット/マージツールでは1メガバイトまたは2メガバイトをはるかに上回ります。Linuxネイティブの同等のソリューションがあると確信しています。追加のツールを見つけた場合は、必ずお知らせします。
2013年

回答:


9

SoXのpad引数と次の構文を使用して簡単に行うことができます。

sox <oldfile> <newfile> pad <silence at beginning of file> <silence at end of file>

例:

sox mp3.mp3 mp3withsilence.mp3 pad 0 1

それらの沈黙は秒単位です。(特定の位置にそれらの沈黙を挿入するために、別の構文を使用して他の使用法が可能です。詳細については、SoXのドキュメントを参照してください。)


MP3ファイル(MP3のデコードとエンコード用にそれぞれlibmad-0.dllとlibmp3lame-0.dllがインストールされている)で問題なくテストしたことに注意してください。可能な限り、ロスレスフォーマットで作業し、最後にのみMP3。
Fabien Snauwaert、2014

それは本当にクールです-ファビアンに感謝します!
Max Williams

これは無損失ですか?
Geremia

更新:soxのマンページを読み、内部フォーマットに変換してから再エンコードします…
Geremia

MP3は非可逆形式です。非可逆形式へのエンコードおよび再エンコードは、オーディオの品質を次第に低下させます(聞こえるかどうかにかかわらず)。したがって、可逆形式で作業し、最後に一度だけ非可逆形式にエンコードすることをお勧めします。非可逆オーディオコーデックのリストについて:en.wikipedia.org/wiki/Lossy_compression#Audioとロスレスオーディオコーデックのリストのためのen.wikipedia.org/wiki/Lossless_compression#Audio
ファビアンSnauwaert

15

ffmpegを使用すると、aevalsrcフィルターを使用して無音を生成し、2番目のコマンドでconcatプロトコルを使用して無損失でそれらを組み合わせることができます。

ffmpeg -filter_complex aevalsrc=0 -t 10 10SecSilence.mp3
ffmpeg -i "concat:input.mp3|10SecSilence.mp3" -c copy output.mp3

-t 10秒単位で希望する時間に変更することで、沈黙の長さを制御できます。もちろん、沈黙を生成する必要があるのは1回だけです。それから、ファイルを保持し、それを使用して、必要な各ファイルにパディングできます。また、concat demuxerを検索することもできます。これは少しプロセッサに負荷がかかりますが、シェルスクリプトにドロップする方が簡単な場合があります。

単一のコマンドで実行する場合は、concatフィルターを使用できます。これには、オーディオを再エンコードする必要があります(フィルターグラフはと互換性がない-codec copyため)。上記のオプションがおそらく最適です。しかし、これは、オーディオをエンコードする前に最後に無音を追加しようとする生のPCMで作業しているすべての人に役立ちます。

ffmpeg -i input.mp3 \
-filter_complex 'aevalsrc=0::d=10[silence];[0:a][silence]concat=n=2:v=0:a=1[out]' \
-map [out] -c:a libmp3lame -q:a 2 output.mp3

d=10任意の時間(秒単位)に変更して、沈黙の長さを制御します。この方法を使用する場合、このFFmpeg MP3エンコーディングガイドが役立つことがあります。


@evilsoupに感謝します。私はちょうどそれを試して、次のものを得ました-max-thinkpad-linux:〜$ ffmpeg -filter_complex aevalsrc = 0 -t 4.61 silence.mp3ffmpeg version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers built on Nov 6 2012 16:51:33 with gcc 4.6.3 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Unrecognized option 'filter_complex' Failed to set value 'aevalsrc=0' for option 'filter_complex'
Max Williams

@maxまず第一に、あなたは実際にlibavプロジェクトのavconvを使用しています-それらはメインプロジェクトの代わりにDebianとUbuntuが使用しているFFmpegのフォークであり、ffmpegの不自由なバージョンを提供します。avconv代わりに使用してみてください-構文は同じでなければなりません。単にに置き換えffmpegてくださいavconv
evilsoup 2013年

それが機能しない場合は、ffmpegの新しいバージョンにアップグレードしてみてください。Ubuntuを使用しているのでこのPPAを使用できるはずです。または、最新バージョンの場合は、ソースからコンパイルできます
evilsoup 2013年

1
@MaxWilliamsまたは、最初にコンパイルする必要のない静的ビルドをダウンロードすることもできます。ダウンロード、抽出、使用するだけです。
slhck 2013年

1
今後の参考のために:私のようなエラーが発生した場合は、一重引用符を二重引用符に置き換えてみてください
SZT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.