У меня есть MP3-файлы, которые имеют тенденцию быть очень короткими, как 1 секунда, содержащие слоги слов. Я хотел бы иметь перекрытие (конец одного слился с началом следующего). Я нашел несколько тем о кроссфейдинге, но я не уверен, что он мне нужен (кроссфейдинг), то есть, чтобы уменьшить громкость одной и поднять громкость следующей, когда мы перейдем к ней. Я думаю, что в настоящее время достаточно слияния аудио.
Перекрытие должно быть порядка микросекунд. Я вижу, что 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] чем-то произвольным? канальны имена? Мне нужно будет генерировать?
Где я могу указать, например, 10 миллисекунд перекрытия между 1.mp3
и 2.mp3
, 2 и 3, а затем 3 и 4?
Или я должен минус 10 миллисекунд от delay1, delay2, delay3?
Дополнение: вот снимок ручного монтажа, который я собрал, чтобы объяснить, чего я пытаюсь достичь программно (предположим, постоянное наложение; здесь я пытаюсь около 100 мс). Пожалуйста, объясните, какие значения для delay1, delay2, delay3 должны быть выше.
Продолжительность MP3 с выхода FFmpeg составляет 550, 440, 500, 960, 440 мс соответственно.
========= Текущий вывод из 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%