sox 명령은 mp3 시작 부분에 자동으로 지연을 추가합니다.

sox 명령은 mp3 시작 부분에 자동으로 지연을 추가합니다.

오디오에서 "윙윙거리는" 소리가 나는 일부 비디오 파일이 있습니다. 그래서 일괄 처리를 위해 다음 스크립트를 만들었습니다.,를 사용하여 ffmpeg오디오를 .mp3로 추출하고 있습니다.삭스소음 제거,그러면 잡음 없는 mp3 파일이 출력됩니다.

여기에 이미지 설명을 입력하세요.

mkdir -p ./tmp;
for f in *.mp4;
do
    title=${f%.mp4};
    echo "Working on $f";
    mv ./"$f" ./tmp/ && ffmpeg -i ./tmp/"$f" -f mp3 -ab 128000 -vn ./tmp/"$title"_noise.mp3;

    echo "Sox process started...";
    sox -v 0.80 ./tmp/"$title"_noise.mp3 ./tmp/"$title"_128.mp3 noisered ./noise_profile 0.20 && sox ./tmp/"$title"_128.$mp3 -C 96 ./$title.mp3;

    echo "Removing Audio from video file...";
    ffmpeg -loglevel warning -stats -y -i ./tmp/"$f" -c copy -an ./"$f";
done

하지만 문제는 00:00:00.050s최종 mp3 파일(HH:MM:SS.ms - Audacity로 확인)에 지연이 추가되는 것을 관찰했다는 것입니다. 나는 믿는다레드 삭스이 지연이 추가되고 있습니다.

  1. 이 문제를 어떻게 해결할 수 있나요? 또는 00.050처음부터 초를 제거/자르고 00.050트랙 끝에 무음 초를 추가하려면 어떻게 해야 합니까?또는
  2. 내 작업을 수행하는 다른 더 좋은 방법이 있습니까?

.wav참고: 아래 응답을 읽은 후 대신 사용하려고 합니다 .mp3. 작동하면 여기에서 업데이트하겠습니다. )

답변1

이는 MP3(MPEG-1 Audio Layer III) 표준에 따라 달라질 수 있습니다.

https://lame.sourceforge.io/tech-FAQ.txt

다음 섹션을 읽어보세요. "LAME이 모든 노래 시작 부분에 무음을 추가하는 이유는 무엇인가요?"

답변2

나는 내 질문에 대한 답을 찾았습니다. 이 문제를 해결하는 방법에는 두 가지가 있습니다. 내 첫 번째 질문에 대한 대답은 ...

1. 이 문제를 어떻게 해결할 수 있나요? 또는 00.050처음부터 초를 제거/자르고 00.050트랙 끝에 무음 초를 추가하려면 어떻게 해야 합니까?

답변 1:mp3를 여러 번 변환하므로 이는 해로울 수 있습니다. 누군가 궁금해하는 경우. trim처음 에 다음 명령을 사용하고 pad끝에 무음을 추가하십시오.

sox Speech_01.mp3 Speech_01_Corrected.mp3 trim 0.049 pad 0 0.050

trim 0.049049ms의 무음이 처음부터 제거됩니다. pad 0 0.050마지막에 050ms의 무음이 추가됩니다.


답변 2: 이로써 내 문제가 해결되었습니다. 나는 팔로우한다이 페이지에 대한 설명, 배치 스크립트를 함께 엮었습니다.

2. 내 작업을 수행하는 다른 더 좋은 방법이 있습니까?

~처럼@Artem S. Tashkinov라고 지적했다절뚝거리는.wav와 형식 간의 샘플 차이 로 인해 .mp3지연 시간이 추가되었습니다 .(저는 이렇게 이해합니다). 그래서 그냥 사용했어요.wav 이 페이지에 설명된 대로.

노트:다음과 같은sox알 수 없는 이유로 인해 명령이 오디오 파일 끝의 작은 부분을 제거하고 있습니다. 따라서 pad오디오 끝에 약간의 무음을 추가하고 실수로 오디오의 일부가 손실되는 것을 방지해야 했습니다. 시행착오를 통해 나는 이것이 0.010ms내 경우에 충분하다는 것을 알았습니다.

# You can observe pad here, which is adding silence at the end.
sox ./tmp/"$title"_noisy.wav ./tmp/"$title"_noisy_s.wav pad 0 0.010

# Below command will delete small part from the end of output wav file,
# Hence the above command.
sox -v 0.80 ./tmp/"$title"_noisy_s.wav ./"$title".wav noisered ./allnoise_profile 0.30

노이즈를 수집하여 생성noise profile.

내 경우에는 파일에 "음" 소음의 다양한 변형이 있었습니다. 따라서 모든 파일에 대해 하나의 노이즈 샘플만 선택하는 것은 나에게 적합하지 않습니다. 그래서 이스케이프된 변형을 복사하고 다음을 사용하여 .wav파일( allnoise_samples.wav) 을 만들었습니다.용감한.노트:변화 사이에 침묵을 지키는 것은 나에게 효과가 없습니다. 따라서 표본은 연속적입니다.

여기에 이미지 설명을 입력하세요.

# Use below command to generate a noise sample file.
sox ./allnoise_samples.wav -n noiseprof ./allnoise_profile

이는 일괄 처리를 위한 최종 스크립트입니다.

파일 처리는 .wav많은 저장 공간을 차지합니다. 그래서 목적이 달성되면 삭제합니다.

mkdir -p ./tmp;
for f in *.mp4;
do
    title=${f%.mp4};
    echo -e "\n\n$f - Splitting Audio and video files...";
    mv ./"$f" ./tmp/"$title"_O.mp4 && ffmpeg -i ./tmp/"$title"_O.mp4 -c:a pcm_s16le -ar 128k -vn ./tmp/"$title"_noisy.wav;
    ffmpeg -i ./tmp/"$title"_O.mp4 -c copy -an ./"$title"_v.mp4;

    echo "Adding Silence at the end...";
    sox ./tmp/"$title"_noisy.wav ./tmp/"$title"_noisy_s.wav pad 0 0.010 && rm -rf ./tmp/"$title"_noisy.wav;

    echo "Sox process started...";
    sox -v 0.80 ./tmp/"$title"_noisy_s.wav ./"$title".wav noisered ./allnoise_profile 0.30 && rm -rf ./tmp/"$title"_noisy_s.wav;

    echo -e "Sox finished... \nMerging Audio and video files...";
    ffmpeg -loglevel warning -stats -y -i ./"$title"_v.mp4 -i ./"$title".wav -map 0:v -map 1:a -c:v copy -c:a aac -b:a 96k ./"$f";
    rm -rf ./"$title"_v.mp4 ./"$title".wav;
done

관련 정보