Как объединить два совершенно разных mp3-файла (разность битрейта, каналы, частота дискретизации, битовая глубина)?

Предположим, что это ваша полная строка

. Подписавшись, я соглашаюсь с Условиями & amp; Политика конфиденциальности

и строка, которую вы хотите сделать кликабельными, -

Условия использования и политика конфиденциальности

, вот, вот мой трюк .....

ClickableSpan terms = new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        new Utils(getActivity()).shortToast("Terms");

    }
};

ClickableSpan privacy = new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        new Utils(getActivity()).shortToast("Privacy");

    }
};

основная функция для этого

public void setClickableString(String wholeValue, TextView textView, final String[] clickableValue, ClickableSpan[] clickableSpans) {
    SpannableString spannableString = new SpannableString(wholeValue);

    for (int i = 0; i < clickableValue.length; i++) {
        ClickableSpan clickableSpan = clickableSpans[i];
        String link = clickableValue[i];

        int startIndexOfLink = wholeValue.indexOf(link);
        spannableString.setSpan(clickableSpan, startIndexOfLink, startIndexOfLink + link.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
    textView.setHighlightColor(
            Color.TRANSPARENT); // prevent TextView change background when highlight
    textView.setMovementMethod(LinkMovementMethod.getInstance());
    textView.setText(spannableString, TextView.BufferType.SPANNABLE);
}

, и вот функция, вызывающая

setClickableString(getString(R.string.terms_and_policy), tv_terms, new String[]{"Terms of Conditions", "Privacy Policy"}, new ClickableSpan[]{terms, privacy});
0
задан llogan 6 March 2019 в 18:08
поделиться

2 ответа

Используйте фильтры atrim , asetpts и concat :

ffmpeg -i input.mp3 -i second.mp3 -filter_complex "[0:a]atrim=end=10,asetpts=N/SR/TB[begin];[0:a]atrim=start=10,asetpts=N/SR/TB[end];[begin][1:a][end]concat=n=3:v=0:a=1[a]" -map "[a]" output

Примечание. Все соответствующие потоки должны иметь одинаковые параметры. во всех сегментах; система фильтрации автоматически выберет общий формат семплов, частоту семплов и схему каналов для аудиопотоков. Эти общие параметры будут варьироваться в зависимости от входных параметров, поэтому добавьте фильтр формата (или эквивалентный), если вы хотите получить согласованные результаты:

ffmpeg -i input.mp3 -i second.mp3 -filter_complex "[0:a]atrim=end=10,aformat=sample_rates=44100:channel_layouts=stereo,asetpts=N/SR/TB[begin];[1:a]aformat=sample_rates=44100:channel_layouts=stereo[middle];[0:a]atrim=start=10,aformat=sample_rates=44100:channel_layouts=stereo,asetpts=N/SR/TB[end];[begin][middle][end]concat=n=3:v=0:a=1[a]" -map "[a]" output
0
ответ дан llogan 6 March 2019 в 18:08
поделиться

Как объединить два совершенно разных mp3-файла (разность битрейта, каналы, частота дискретизации, битдеф)?

Давайте начнем с каждого компонента ...

битрейт

Это не имеет значения. Потоки MP3 могут (и делают!) Изменять битрейт в среднем потоке. Пока вы присоединяетесь к заголовку фрейма, все в порядке.

bitdepth

Концепция глубины в битах семплов не существует в MP3. Вы можете записывать в 24-битном формате, кодировать в MP3, а декодер будет декодировать в 16-битном формате. (Или с некоторыми переключателями командной строки, наоборот!) Это не проблема, потому что битовая глубина не применяется.

частота дискретизации

Обычно это проблема. Большинство игроков не предполагают, что они собираются изменить частоту дискретизации в середине потока. Большинство игроков не пытаются повторить выборку, чтобы придерживаться скорости, с которой они уже выводили. Я не удивлен, что у вас возникнут проблемы с изменением частоты дискретизации.

channel

Это похоже на проблему с частотой дискретизации, поскольку требует изменения конфигурации устройства вывода. Даже если игрок поддерживает это, это не будет гладко. (Если только вы не переходили от стерео к моно, где моно можно было легко микшировать на стерео.)

В качестве входных данных я получаю один файл mp3 (input.mp3), затем мне нужно разделить его на две отдельные части (сделано это) и вставьте между этими частями еще один mp3 (second.mp3).

На самом деле это еще одна проблема, о которой вы не спрашивали ... время. MP3 работает в относительно больших кадрах (обычно 576 сэмплов), что становится разрешением, при котором вы можете склеивать. Нехорошо. Кроме того, начало дорожек часто имеет один или два кадра инициализации.

Третий вопрос - битовый резервуар. Именно здесь содержимое из одного кадра хранится в другом кадре, который может иметь дополнительное пространство.

В конце дня вам придется декодировать все в обычные сэмплы PCM, выполнять сплайсинг и перекодировать в MP3. Вы также должны будете повторно сэмплировать все на общую тактовую частоту и смешать с определенным количеством каналов. К счастью, когда-то декодированный в PCM, это все тривиально и стандартно. Как только ваши входные потоки совместимы, вы произвольно соединяете кадр PCM, который является наиболее детализированным из возможных.

0
ответ дан Brad 6 March 2019 в 18:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: