Создать тихий WAV и передать его

Я прошел через множество страниц и форумов stackoverflow, пытаясь найти нужный мне ответ. Я создал виртуальный микрофон и пытаюсь передать ему некоторые звуки WAV, созданные с помощью FFMPEG.

Когда я хочу передать шум клавиатуры, я передаю звук на свое виртуальное устройство захвата звука следующим образом:

ffmpeg -fflags +discardcorrupt -i <Keyboard sound Path> -f s16le -ar 44100 -ac 1 - > /tmp/gapFakeMic

И когда я хочу передать какой-то синтезированный голосовой звук с помощью Espeak на свой виртуальный микрофон, я делаю следующее:

espeak -vbrazil-mbrola-4 <some random text> --stdout | ffmpeg -fflags +discardcorrupt -i pipe:0 -f s16le -ar 44100 -ac 1 - > /tmp/gapFakeMic

Проблема в том, что мое устройство захвата не записывает звук, как обычный рекордер, который все еще записывает, даже если на него не передается звук. Итак, я пытаюсь добавить тишину к wav, который создается во время работы моего приложения. Всегда, когда я пытаюсь отправить тишину в буфер, FFMPEG возвращает следующий ответ:

[NULL @ 0x5579f7921a00] Unable to find a suitable output format for 'pipe:'

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

Обновлено:

Вот как я создаю тишину для своего виртуального микрофона:

ffmpeg -f lavfi -i anullsrc=channel_layout=mono:sample_rate=44100 -t <Time in seconds> - > /tmp/gapFakeMic

Вот полный журнал:

ffmpeg version 4.1.6-1~deb10u1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8 (Debian 8.3.0-6)
  configuration: --prefix=/usr --extra-version='1~deb10u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared

  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100

Input #0, lavfi, from 'anullsrc=channel_layout=mono:sample_rate=44100':
  Duration: N/A, start: 0.000000, bitrate: 352 kb/s
    Stream #0:0: Audio: pcm_u8, 44100 Hz, mono, u8, 352 kb/s

[NULL @ 0x560516626f40] Unable to find a suitable output format for 'pipe:'
pipe:: Invalid argument

Обновлено еще раз:

После того, как Gyan предоставил решение в комментариях, указанная выше ошибка больше не отображается, но мой результат аудио не работает и выходит не так, как ожидалось. Теперь команда, которая генерирует и добавляет беззвучный звук, выглядит так:

ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t <Time in seconds> -f s16le - > /tmp/gapFakeMic

Изменить 3:

Я внес некоторые изменения в команду, которую использую для передачи тишины на виртуальный микрофон. Я думаю труба ломается из-за какой-то несовместимости аудиоформатов. Надеюсь, я найду решение в ближайшие несколько дней. После каждого небольшого изменения я замечаю некоторые улучшения. Теперь я могу слышать тишину между звуками клавиш, но он записывает не все аудио, которые я ему передаю. Вот как теперь выглядит команда:

ffmpeg -f lavfi -i anullsrc=channel_layout=mono:sample_rate=44100 -t <Time in seconds> -f s16le -ar 44100 -ac 1 - > /home/icaroerasmo/gapFakeMic`

Я также понял, что когда я передаю звук в файл канала, созданный в моей домашней папке, качество звука улучшается.

Изменить 4:

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

Поделитесь полным журналом.

Gyan 31.03.2021 07:19

Я отредактировал, чтобы добавить способ отправки беззвучного звука на свой виртуальный микрофон, а также добавил полный журнал

Ícaro Erasmo 31.03.2021 17:02

Вам необходимо установить формат вывода по конвейеру, например. -f s16le

Gyan 31.03.2021 17:05

Благодарю за ваш ответ. Это мне очень помогло. Но это все еще не 100%. Я добавил другое издание

Ícaro Erasmo 31.03.2021 17:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
46
0

Другие вопросы по теме