ffmpeg: очищать выходной файл каждый кусок - PullRequest
0 голосов
/ 29 мая 2018

Я использую ffmpeg для генерации синусоидального сигнала в режиме реального времени в течение 10 секунд.К сожалению, ffmpeg, похоже, сбрасывает выходной файл очень редко, каждые несколько секунд.Я бы хотел, чтобы он сбрасывал каждые 2048 байт (= ширина выборки 2 байта * 1024 выборки, мой размер фрагмента).

Вывод следующего скрипта:

import os
import time
import subprocess

cmd = 'ffmpeg -y -re -f lavfi -i "sine=frequency=440:duration=10" -blocksize 2048 test.wav'    

subprocess.Popen(cmd, shell=True)

time.sleep(0.1)
while True:
    print(os.path.getsize("test.wav"))
    time.sleep(0.1)

выглядит следующим образом:

[...]
78
78
78
262222
262222
262222
[...]

Пользователь на IRC #ffmpeg предложил использовать

ffmpeg -re -f lavfi -i "sine=frequency=1000:duration=10" -f wav pipe: > test.wav

, что работает.Но можно ли этого достичь, просто используя ffmpeg?

1 Ответ

0 голосов
/ 29 мая 2018

Для вывода в файл ffmpeg ожидает заполнения буфера 256 КБ перед записью.

Вы можете отключить это поведение, используя flush_packets.

ffmpeg -y -re -f lavfi -i "sine=f=440:d=10" -blocksize 2048 -flush_packets 1 test.wav
...