![특정 중첩 기간을 사용하여 여러 개의 짧은 오디오 MP3 파일을 연결하는 방법](https://rvso.com/image/1520089/%ED%8A%B9%EC%A0%95%20%EC%A4%91%EC%B2%A9%20%EA%B8%B0%EA%B0%84%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%AC%EB%9F%AC%20%EA%B0%9C%EC%9D%98%20%EC%A7%A7%EC%9D%80%20%EC%98%A4%EB%94%94%EC%98%A4%20MP3%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%97%B0%EA%B2%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
나는 단어의 음절을 포함하는 1초 정도의 매우 짧은 경향이 있는 MP3 파일을 가지고 있습니다. 겹치는 부분(한 부분의 끝이 다음 부분의 시작 부분과 병합됨)을 갖고 싶습니다. 크로스페이딩에 대한 여러 가지 주제를 찾았지만 그것이 필요한지 잘 모르겠습니다(크로스페이딩). 즉, 전환할 때 하나의 볼륨을 낮추고 다음 주제의 볼륨을 높이는 것입니다. 지금은 오디오를 병합하는 것만으로도 충분하다고 생각합니다.
중첩은 마이크로초 단위여야 합니다. FFmpeg의 일부 옵션에는 초 단위의 소수점이 있습니다. 현재 나는 다음과 같은 짧은 MP3를 연결하고 있습니다.
/// <summary>
/// <para/>20170114
/// </summary>
/// <returns></returns>
public void ConcatMP3s(String InFiles, String OutputFile)
{
// http://superuser.com/questions/87040/how-to-stich-mp3s-together-with-ffmpeg
var _IN_PARAMS = " -f concat ";
var _IN_FILES = "-safe 0 -i " + DQuote(InFiles);
var _OUT_PARAMS = " -c copy -y "; // -y to overwrite the output file
var _OUT_FILE = DQuote(OutputFile);
//
var _FFMPEG_ARGS = _IN_PARAMS + _IN_FILES + _OUT_PARAMS + _OUT_FILE;
//return _FFMPEG_ARGS;
//
RunFFmpeg(_FFMPEG_ARGS);
}
한 번에 여러 파일을 연결하는 명령이나 기술을 원하지만 두 파일에 대해 수행하는 방법을 보여주시면 모든 파일을 반복할 수 있습니다. 추악하지만 수용 가능한 답변입니다 :).
@Mulvya, 귀하의 링크에서 얻을 수 있는 것은 다음 FFmpeg 명령줄 구조입니다(모두 하나의 명령줄 문자열에 포함).
ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -i 4.mp3
-filter_complex
"[1]adelay=delay1|delay1[b];
[2]adelay=delay2|delay2[c];
[3]adelay=delay3|delay3[d];
[0][b][c][d]amix=4"
merged.mp3
지연1, 지연2, 지연3은 무엇이어야 합니까? 각각 1.mp3
, 2.mp3
, 의 지속 시간(밀리초)입니까 3.mp3
?
이러한 기간을 검색하는 가장 좋은 방법은 무엇입니까? 예를 들어, 파일 시스템 파일 속성이 정확합니까?
문자 [b], [c], [d]는 임의적인 것입니까? 채널 이름? 생성해야 합니까?
1.mp3
예를 들어 와 2.mp3
, 2와 3, 3과 4 사이에 10밀리초가 겹치도록 지정하려면 어떻게 해야 합니까 ?
아니면 지연1, 지연2, 지연3에서 10밀리초를 빼야 합니까?
추가: 여기에 프로그래밍 방식으로 달성하려는 작업을 설명하기 위해 함께 구성한 수동 몽타주의 스냅샷이 있습니다(지속적인 중첩을 가정합니다. 여기서는 약 100ms를 시도하고 있습니다). 위의 지연1, 지연2, 지연3 값이 무엇인지 설명해주세요.
FFmpeg 출력의 MP3 지속 시간은 각각 550, 440, 500, 960, 440ms입니다.
========= FFmpeg의 현재 출력
_VDO\FFmpeg 20160310\bin\FFmpeg -i "S:\_W\ARP_WEB\SRC\SND\A4_23\1\01.mp3" -i "S:\_W\ARP_WEB\SRC\SND\A2\1\22.mp3" -i "S:\_W\ARP_WEB\SRC\SND\A2\3\23.mp3" -i "S:\_W\ARP_WEB\SRC\SND\A3\1\24.mp3" -i "S:\_W\ARP_WEB\SRC\SND\A2\2\03.mp3" -filter_complex "[1]adelay=279[b];[2]adelay=592[c];[3]adelay=916[d];[4]adelay=1712[e]; [0][b][c][d][e]amix=5" -y "S:\_W\ARP\AMSSTUDIO\SRC\DATA\FFMPEG\DEBUG Concat with Overlap\OUT.MP3"
ffmpeg version N-79000-g66edd86 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 5.3.0 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmfx --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib libavutil 55. 19.100 / 55. 19.100 libavcodec 57. 28.100 / 57. 28.100 libavformat 57. 28.100 / 57. 28.100 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 39.102 / 6. 39.102 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 libpostproc 54. 0.100 / 54. 0.100 [mp3 @ 0000000000584ba0] Estimating duration from bitrate, this may be inaccurate Input #0, mp3, from 'S:\_W\ARP_WEB\SRC\SND\A4_23\1\01.mp3': Duration: 00:00:00.55, start: 0.000000, bitrate: 320 kb/s Stream #0:0: Audio: mp3, 44100 Hz, mono, s16p, 320 kb/s [mp3 @ 00000000005a2a20] Estimating duration from bitrate, this may be inaccurate Input #1, mp3, from 'S:\_W\ARP_WEB\SRC\SND\A2\1\22.mp3': Duration: 00:00:00.44, start: 0.000000, bitrate: 320 kb/s Stream #1:0: Audio: mp3, 44100 Hz, mono, s16p, 320 kb/s [mp3 @ 000000000058af00] Estimating duration from bitrate, this may be inaccurate Input #2, mp3, from 'S:\_W\ARP_WEB\SRC\SND\A2\3\23.mp3': Duration: 00:00:00.50, start: 0.000000, bitrate: 320 kb/s Stream #2:0: Audio: mp3, 44100 Hz, mono, s16p, 320 kb/s [mp3 @ 000000000058cb80] Estimating duration from bitrate, this may be inaccurate Input #3, mp3, from 'S:\_W\ARP_WEB\SRC\SND\A3\1\24.mp3': Duration: 00:00:00.96, start: 0.000000, bitrate: 127 kb/s Stream #3:0: Audio: mp3, 44100 Hz, mono, s16p, 128 kb/s [mp3 @ 00000000005c5c00] Estimating duration from bitrate, this may be inaccurate Input #4, mp3, from 'S:\_W\ARP_WEB\SRC\SND\A2\2\03.mp3': Duration: 00:00:00.44, start: 0.000000, bitrate: 320 kb/s Stream #4:0: Audio: mp3, 44100 Hz, mono, s16p, 320 kb/s Output #0, mp3, to 'S:\_W\ARP\AMSSTUDIO\SRC\DATA\FFMPEG\DEBUG Concat with Overlap\OUT.MP3': Metadata: TSSE : Lavf57.28.100 Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, mono, fltp (default) Metadata: encoder : Lavc57.28.100 libmp3lame Stream mapping: Stream #0:0 (mp3) -> amix:input0 Stream #1:0 (mp3) -> adelay Stream #2:0 (mp3) -> adelay Stream #3:0 (mp3) -> adelay Stream #4:0 (mp3) -> adelay amix -> Stream #0:0 (libmp3lame) Press [q] to stop, [?] for help Error while filtering: Cannot allocate memory size= 5kB time=00:00:00.54 bitrate= 70.2kbits/s speed=42.3x video:0kB audio:4kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.938003%
답변1
다음 형식의 명령을 사용하십시오.
ffmpeg -i 1.mp3 -i 2.mp3 -i 3.mp3 -i 4.mp3
-filter_complex
"[1]adelay=delay1|delay1[b];
[2]adelay=delay2|delay2[c];
[3]adelay=delay3|delay3[d];
[0][b][c][d]amix=4"
merged.mp3
각각 delayN
의 밀리초는 오디오 스트림 시작 부분부터의 오디오 시작 오프셋입니다. 따라서 file2가 최종 믹스의 14.2초에서 시작되도록 하려면 adelay=14200|14200
스테레오 입력에 사용하세요. adelay=14200
모노 입력에 사용할 수 있습니다 . 스크린샷에서 이는 시작 열 값입니다.
라벨 패드 [a]
..etc는 임의적이며 필터 출력에 할당되므로 나중에 다른 필터에서 사용하거나 출력용으로 매핑할 수 있습니다. 각 패드는 한 번씩 소모될 수 있습니다. 영숫자이지만 [2]
ffmpeg가 입력 파일을 참조하기 위해 정수를 사용하므로 순수한 정수를 할당하지 마십시오.