Jak wygenerować falę sinusoidalną za pomocą ffmpeg?

13

Chciałbym wygenerować plik audio z falą sinusoidalną za pomocą FFmpeg. Wiem, że jest sinefiltr, ale to tak daleko, jak to możliwe.

Próbowałem:

fmpeg -filter "sine=48:1:5" -c:a pcms16le test

aby utworzyć 5 sekund dźwięku przy 48 kHz w formacie PCM S16LE, ale dostałem następujący komunikat o błędzie:

Plik wyjściowy nr 0 nie zawiera żadnego strumienia

i testplik jest pusty.

UmNyobe
źródło
Możesz także odtworzyć sinus bez tworzenia pliku za pomocą ffplay: stackoverflow.com/questions/5109038/linux-sinus-audio-generator/...
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Odpowiedzi:

23

Aby wygenerować sygnał 1000 Hz przez 5 sekund, użyj tego:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" test.wav

Możesz dodać -c:a pcm_s16le:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -c:a pcm_s16le test.wav    

Aby również ustawić częstotliwość próbkowania na 48 KHz:

ffmpeg -f lavfi -i "sine=frequency=1000:sample_rate=48000:duration=5" -c:a pcm_s16le test.wav
Rajib
źródło
2
Możesz także ustawić amplitudę, dodając na przykład: -af "volume=-18dB"(dla -18dBFS).
mivk
6

Przepraszamy za to, że trzeba to robić, ale jeśli ktoś z przyszłości będzie tego szukał, jeśli chcesz to zrobić w stereo, wykonaj następujące czynności:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ac 2 output.wav

Możesz także użyć -filter_complexz amerge:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -filter_complex "[0:a][0:a]amerge=inputs=2[aout]" -map "[aout]" output.wav
ochdude
źródło