MP3 끝에 침묵 추가


12

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

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

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

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


2
mp3DirectCut (Windows에서만 가능하지만 Linux에서 Wine과 호환된다고 말함)을 사용하여 이와 같은 것을 수행 할 수 있다고 생각합니다 . 사운드 데이터를 다시 압축하지 않습니다. MP3-> WAV-> MP3로 이동하면 이미 MP3 압축 데이터 스트림을 다시 압축하여 많은 품질을 잃게됩니다.
획기적인

감사. 명령 줄에서 Wine을 통해 Windows 소프트웨어를 실행할 수 있습니까? 서버에 Wine을 설치하는 것을 꺼려하기 때문에 가능하면 Wine 솔루션을 피하고 싶습니다.
Max Williams

흠, 아직 와인 루트가 없다면 와인 루트를 피하고 싶을 수도 있습니다. 와인 자체는 상당히 큰 다운로드이며, 단순한 MP3 잘라 내기 / 병합 도구를 위해 메가 바이트 또는 두 개 이상입니다. 필자는 동등한 Linux 네이티브 솔루션이 있다고 확신합니다. 추가 도구를 찾으면 알려 드리겠습니다.
획기적인

답변:


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

정말 멋지다-감사합니다 Fabien!
Max Williams

이것은 무손실입니까?
Geremia

업데이트 : Sox 맨 페이지에서 내부 형식으로 변환 한 다음 다시 인코딩한다는 내용을 읽었습니다.
Geremia

MP3는 손실 형식입니다. 손실이있는 형식으로 인코딩하고 다시 인코딩하면 오디오 품질이 점진적으로 저하됩니다 (소리가 들리 든 그렇지 않든 상관 없습니다). 따라서 손실없는 형식으로 작업하고 손실이있는 형식으로 한 번만 인코딩하는 것이 가장 좋습니다. 손실 오디오 코덱 목록 : en.wikipedia.org/wiki/Lossy_compression#Audio 및 손실없는 오디오 코덱 목록 en.wikipedia.org/wiki/Lossless_compression#Audio
Fabien Snauwaert

15

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 인코딩 안내서가 유용 할 수 있습니다.


감사합니다 @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를 사용하고 있습니다-그것들은 데비안 & 우분투가 메인 프로젝트 대신 사용하는 FFmpeg의 포크이며, ffmpeg의 절름발이 버전을 제공합니다. 사용해보십시오 avconv대신 - 구문 그냥 교체, 동일해야합니다 ffmpeg으로 avconv.
evilsoup

그래도 문제가 해결되지 않으면 최신 버전의 ffmpeg로 업그레이드하십시오. Ubuntu를 사용 중이므로이 PPA 를 사용 하거나 최신 버전의 경우 source에서 컴파일 할 수 있습니다.
evilsoup

1
@MaxWilliams 또는 정적 빌드를 다운로드 할 수 있습니다.이 빌드 는 먼저 컴파일 할 필요가 없습니다. 다운로드, 추출, 사용 만하면됩니다.
slhck

1
나중에 참조 할 수 있습니다 : 나와 같은 오류가 발생하면 작은 따옴표를 큰 따옴표로
바꾸
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.