Tidak dapat memperoleh video berkelanjutan selama N detik terakhir menggunakan ffmpeg [duplikat]

Saya mencoba membuat dashcam dari perangkat streaming RTSP menggunakan ffmpeg (dengan Python). Saya sudah menjalankannya, tetapi saya kehilangan sedikit video antara menghentikan file dan memulai file baru.

Pseudocode saya terlihat seperti ini:

Start recording in 5s increments
while True:
   now = get current time
   if now > split:
       stop recording
       start recording with new file name

Kapan pun saya mengirim pemicu, saya menunggu (hingga 5 detik) hingga file saat ini ditulis ke disk, lalu saya menggabungkan jumlah file yang diperlukan untuk mendapatkan video dengan durasi yang diinginkan. Masalahnya adalah saya kehilangan waktu antara berhenti dan memulai.

Saya memulai file baru seperti ini:

process_cmd = "ffmpeg -y -loglevel panic -i rtsp://{}:{}@{} -vf scale={}:{} -t {} {}".format(self._rtsp_login, self._rtsp_pwd, self._rtsp_server, self._width, self._height,self._rtsp_video_duration,output_file)
self._process_handle = subprocess.Popen(process_cmd, shell=True)

Saya menunggu videonya selesai direkam oleh:

self._process_handle.wait()

Apa cara yang lebih bersih untuk melakukan ini? Salah satu opsinya adalah menulis file yang lebih panjang dan kemudian menggunakan ffmpeg untuk mengekstrak N detik yang diinginkan darinya.

proc = subprocess.Popen("ffmpeg -y -i rtsp://admin:[email protected] -profile:v high -pix_fmt nv12 -b:v 15M -acodec aac out.mp4", stdin=subprocess.PIPE,shell=True)

Ini mengharuskan saya menghentikan perekaman terlebih dahulu dengan mengirimkan 'q' ke proses dan kemudian:

subprocess.Popen("ffmpeg -y -sseof -00:00:3 -i out.mp4 -vcodec copy -acodec copy test.mp4", shell=True)

Namun file sumber tersebut (out.mp4) harus sering dibersihkan dan jika suatu peristiwa terjadi pada saat itu, maka saya tidak akan dapat mengambil datanya.


person trycatch22    schedule 25.06.2021    source sumber
comment
Terima kasih!! Ini sangat berguna.   -  person trycatch22    schedule 26.06.2021