Я разрабатываю приложение на С++, которое использует FFmpeg для воспроизведения аудио/видео. Теперь я хочу улучшить приложение, чтобы пользователи могли извлекать аудио из видео. Как можно использовать FFmpeg для этого? Я много искал об этом, но я не смог найти учебник по этому поводу.
Как извлечь аудио из видео с помощью ffmpeg на С++?
comment
Этот вопрос слишком общий. Либо слишком много возможных ответов, либо хорошие ответы будут слишком длинными для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или выделить проблему, на которую можно ответить в нескольких абзацах.
- person Jørgen R   schedule 10.06.2015
comment
в основном моя проблема заключается в том, как использовать ffmpeg lib для извлечения аудио из видео в c/c++
- person patrick   schedule 10.06.2015
comment
См. официальный пример filtering_audio. Он передает звуковые кадры (после некоторой фильтрации) на stdout. При желании эти фитеры довольно легко отключить.
- person Alex Cohn   schedule 04.06.2020
Ответы (2)
Тебе следует
- Откройте контекст ввода [
avformat_open_input
] - Получить информацию о потоке [
avformat_find_stream_info
] - Получить аудиопоток:
if (inputFormatContext->streams[index]->codec->codec_type ==
AVMEDIA_TYPE_AUDIO) {
inputAudioStream = inputFormatContext->streams[index];
}
- Прочитайте каждый пакет. пакет AVPacket;
int ret = av_read_frame(inputFormatContext, &packet);
if (ret == 0) {
if (packet.stream_index == inputAudioStream->index) {
// packet.data will have encoded audio data.
}
}
person
user2331977
schedule
10.06.2015
Вы можете сохранить в любом формате контейнера. Откройте контекст формата вывода, используя avformat_alloc_output(), откройте файл в режиме записи avio_open, запишите заголовок, используя avformat_write_header(), запишите данные, используя av_interleaved_write_frame, и запишите хвост, используя av_write_trailer. Вы также можете обратиться к ffmpeg/muxing.c.
- person user2331977; 11.06.2015
я пытался использовать указанную выше ссылку, но строка avformat_alloc_output_context2(&oc, NULL, NULL, имя файла); выдает ошибку неопределенной ссылки на avformat_alloc_output_context2
- person patrick; 11.06.2015
можете ли вы написать псевдокод, чтобы я мог написать правильный код C
- person patrick; 11.06.2015
Вы могли бы просто иметь небольшой полный пример, чтобы всем было намного легче следовать.
- person Ayxan Haqverdili; 04.06.2020
Это похоже на простую задачу написания сценария... почему вы хотите использовать тяжелую артиллерию (C/C++), чтобы прихлопнуть муху?
Я использую Applescript для создания/запуска командной строки ffmpeg через оболочку Bash. Единственная причина, по которой я использую Applescript, заключается в том, что я могу вызывать его как дроплет (т. е. перетаскивать файлы в приложение и запускать его без взаимодействия).
Я понимаю, что вы, вероятно, работаете в Windows, то есть без Applescript и без Bash. Но, конечно, что-то более легкое, чем C, может создать/запустить командную строку ffmpeg. Это действительно так же просто, как:
ffmpeg -i infile.mp4 -b 160k outfile.mp3
person
Roger Krueger
schedule
10.06.2015
Я делаю это, чтобы создать собственный код для своего приложения для Android.
- person patrick; 10.06.2015
ОП указал, что они делают приложение на С++. Этот ответ вообще бесполезен.
- person Ayxan Haqverdili; 04.06.2020