Как разделить И кодировать аудио на две части и объединить их, используя ffmpeg?

380
Henry

Извините за длинный вопрос, я не знаю, как проще / короче сказать вам мою точку зрения.

Я хочу использовать ffmpeg для редактирования (затухания и т. Д.) И разделить аудиофайл и объединить его после. (Я не могу использовать копию -c, потому что я использую фильтры)

При использовании mp3 позиция разделения очевидно разрушается при объединении. Поэтому я попытался использовать сырой линейный формат, но он также создает артефакты в точке разделения.

Есть ли аудиокодек, который можно использовать для моих целей, или у вас есть другая идея, которая может решить мою проблему? Заранее спасибо!

В качестве отправной точки, вот мои команды прямо сейчас:

ffmpeg -t 20 -i song.mp3 -filter_complex afade=t=in:ss=0:d=2 -vn -f u16le part1.raw ffmpeg -ss 20 -i song.mp3 -filter_complex afade=t=out:ss=60:d=2 -vn -f u16le part2.raw 

^ Я знаю, что это можно сделать без разделения, но позже я передам вывод и т. Д. В живую среду, поэтому мне нужно разделить / объединить ...

ffmpeg -f u16le -i "concat:part1.raw|part2.raw" -vn output.mp3

1
MP3 не имеют временных меток, поэтому поиск демультиплексора неточен. Переключиться на поиск декодера, т.е. поставить ss / t после имени входа. Gyan 6 лет назад 0
Я попробую это, спасибо! Но я не слишком оптимистичен, потому что я пытался конвертировать mp3 в raws заранее, и это тоже не сработало. Henry 6 лет назад 0
Я смог воспроизвести вашу проблему, используя команды вашей формы, и избежать ее, переключившись на поиск декодера. Gyan 6 лет назад 0
Спасибо приятель! Попробую это прямо сейчас. Другое дело, почему вы не опубликовали свой первый комментарий в качестве ответа? Я новичок в этой платформе. Henry 6 лет назад 0
Это не работает для меня. Дело в том, что я использую непрерывный поток в конце. То, что я пишу в канал: Song1, Crossfade, первые 10 секунд Song2 -> Song2 -ss 10, Crossfade, первые 10 секунд Song3 ... - это входит в один экземпляр, который затем кодирует поток icecast + mp3-файл. Этот экземпляр выдает ошибки при использовании mp3: «Заголовок отсутствует / Обнаружены неверные данные при обработке входных данных / Аудиопакет недействителен» и т. Д. - при использовании raw он не выдает ошибки, но при каждом разрезе присутствуют артефакты. Есть идеи, как мне этого добиться? Могу ли я сказать экземплярам слиться с последней частью потока? Henry 6 лет назад 0
Так какую именно серию команд вы используете? Gyan 6 лет назад 0
Пример песни: ffmpeg -t 20 -i song1.mp3 -i song2.mp3 -filter_complex crossfade = d = 2 -vn -f mp3 -ss 10 -t 20 pipe: 1; Поток: ffmpeg -f mp3 -i pipe: 0 -y -vn icecast: // source: pw@example.com: 8000 / stream.mp3 stream.mp3 (-t 20 на входе для размещения перекрестного затухания - теперь также используется mp3 для труба, как это не имеет значения + mp3 показывает ошибки в экземпляре потока) Henry 6 лет назад 0
Это все еще использует demuxer seek для ограничения song1. Задержка декодера также может вступать в игру. Оберните ваши MP3 в контейнер типа MKV и проверьте. Gyan 6 лет назад 0
Я провел еще какое-то тестирование и теперь думаю, что проблема в задержке перед началом следующей песни. Вы знаете, возможно ли иметь буфер в канале (так что генерация песни впереди)? Другой возможностью было бы изменить входные данные экземпляра потока во время работы, но я думаю, что это невозможно ... Henry 6 лет назад 0
После долгих экспериментов с потоками nodejs (я интегрирую это с помощью fluent-ffmpeg) мне удалось увеличить размер буфера потока и теперь у меня есть свободный поток - большое спасибо за вашу помощь! Henry 6 лет назад 0
Если вы успешно решили проблему, стоит написать резюме и опубликовать шаги в качестве ответа на ваш вопрос. JonathanDavidArndt 6 лет назад 0

0 ответов на вопрос

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