오디오에서 "윙윙거리는" 소리가 나는 일부 비디오 파일이 있습니다. 그래서 일괄 처리를 위해 다음 스크립트를 만들었습니다.,를 사용하여 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로 확인)에 지연이 추가되는 것을 관찰했다는 것입니다. 나는 믿는다레드 삭스이 지연이 추가되고 있습니다.
- 이 문제를 어떻게 해결할 수 있나요? 또는
00.050
처음부터 초를 제거/자르고00.050
트랙 끝에 무음 초를 추가하려면 어떻게 해야 합니까?또는 - 내 작업을 수행하는 다른 더 좋은 방법이 있습니까?
.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.049
049ms의 무음이 처음부터 제거됩니다. 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