![옵션 1](https://rvso.com/image/1606702/%EC%98%B5%EC%85%98%201.png)
파일 이름을 말하는 음성으로 시작하도록 수정하고 싶은 .mp3 파일이 많이 있습니다. 이를 수행하는 가장 쉬운 방법은 다음과 같습니다.
for file in ./*.mp3; do
BASE="$(basename "$file" .mp3)"
mv $file $BASE-bak.mp3
say "[[volm 0.4]] $BASE" -o $BASE-pre.aiff
ffmpeg -i $BASE-pre.aiff -f mp3 -acodec libmp3lame -ab 192000 -ar 44100 $BASE-pre.mp3
rm $BASE-pre.aiff
mp3cat -o $file $BASE-pre.mp3 $BASE-bak.mp3
done
이것거의작동하지만 결과 mp3 파일이 손상되었습니다(길이는 적당하지만 소리가 나지 않으며 파일 이름을 말하는 데 걸린 시간(약 2초) 후에 항상 재생이 중지됩니다(대략 2초). mp3cat
그러나 ffmpeg
or 또는 다른 것을 사용하는 것 역시 작동하지 않는 것 같고, 내 생각에는 적절한 양의 스트림을 갖지 않아 mp3wrap
생성된 파일과 관련이 있는 것 같습니다 (그게 무엇을 의미하든).say
이 문제를 해결하는 방법이나 완전히 다른 방식으로 수행하는 방법에 대한 제안이 있습니까?
답변1
ffmpeg를 사용하도록 스크립트를 수정했습니다. 언제나 그렇듯, 데이터 손실을 방지하려면 스크립트를 실행하기 전에 파일을 백업하세요.
옵션 1
속도가 느려지면 파일이 다시 인코딩되지만 메타데이터는 보존됩니다.
for file in ./*.mp3; do
BASE="$(basename "$file" .mp3)"
mv "${file}" "${BASE}-bak.mp3"
say "[[volm 0.4]] ${BASE}" -o "${BASE}-pre.aiff"
ffmpeg -i "${BASE}-pre.aiff" -f mp3 -acodec libmp3lame -ab 192000 -ar 44100 "${BASE}-pre.mp3"
rm "${BASE}-pre.aiff"
ffmpeg -i "${BASE}-pre.mp3" -i "${BASE}-bak.mp3" -filter_complex [0:a][1:a]concat=n=2:v=0:a=1 -map_metadata 1 "${file}"
rm "${BASE}-pre.mp3"
done
옵션 2:
빠르고 재인코딩이 필요하지 않으며 메타데이터가 손실됩니다.
for file in ./*.mp3; do
BASE="$(basename "$file" .mp3)"
mv "${file}" "${BASE}-bak.mp3"
say "[[volm 0.4]] ${BASE}" -o "${BASE}-pre.aiff"
ffmpeg -i "${BASE}-pre.aiff" -f mp3 -acodec libmp3lame -ab 192000 -ar 44100 "${BASE}-pre.mp3"
rm "${BASE}-pre.aiff"
echo "file '${BASE}-pre.mp3'" >temp
echo "file '${BASE}-bak.mp3'" >>temp
ffmpeg -f concat -safe 0 -i temp "${file}"
rm "${BASE}-pre.mp3"
rm temp
done
어느 쪽이든 결과 파일은 QuickTime을 사용하여 제대로 작동하는 것처럼 보이며 전체 파일이 제대로 재생됩니다.
답변2
이것을 시도해 보십시오: 대상 .mp3도 변환하려는 동일한 형식으로 변환하십시오. 몇 가지 수정 사항과 주의 사항을 적용하여 단계를 다시 작성하세요.
mkdir -p backup/
mkdir -p working/
for file in ./*.mp3; do
BASE="$(basename "$file" .mp3)"
say "[[volm 0.4]] $BASE" -o "${BASE}-pre.aiff"
ffmpeg -i "${BASE}-pre.aiff" -f mp3 -acodec libmp3lame -ab 192000 -ar 44100 "${BASE}-pre.mp3"
ffmpeg -i "$file" -f mp3 -acodec libmp3lame -ab 192000 -ar 44100 "${BASE}-bak.mp3"
rm "${BASE}-pre.aiff"
mv "$file" backup/
mp3cat -o "$file" "${BASE}-pre.mp3" "${BASE}-bak.mp3"
mv "${BASE}-pre.mp3" working/
mv "${BASE}-bak.mp3" working/
done