MP3 끝에 침묵 추가 방법은 SoX 에서 pad기능을 사용하는 것이지만

Linux에서 MP3의 끝에 고정 된 지속 시간의 침묵을 추가하는 방법에 대해 아는 사람이 있습니까? 예를 들어 MEncoder, FFmpeg 등을 사용합니까?

서버에서 스크립트되고 실행되므로 명령 행이어야합니다.

나는 이것을 둘러 보았고 내가 할 수있는 최선의 방법은 SoX 에서 pad기능을 사용하는 것이지만 MP3에서는 작동하지 않습니다.

WAV로 변환하고 SoX를 사용한 다음 다시 MP3로 변환하고 메타 데이터 (길이를 뺀)를 원본에서 새 MP3로 복사 할 수 있습니다. 그러나 스크립트를 작성하기 전에 한 번의 솔루션이 있는지 알 것이라고 생각했습니다.



답변

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 설명서를 참조하십시오.


답변

ffmpeg를 사용하면 aevalsrc 필터를 사용하여 무음을 생성 한 다음 두 번째 명령에서 concat 프로토콜을 사용하여 무손실로 결합 할 수 있습니다.

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

-t 10원하는 시간 (초)을 변경 하여 무음 길이를 제어 할 수 있습니다 . 물론, 한 번만 침묵을 생성하면 파일을 보관하고 원하는 각 파일을 채울 수 있습니다. 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 인코딩 안내서가 유용 할 수 있습니다.


답변