ไม่สามารถรับวิดีโอต่อเนื่องในช่วง N วินาทีสุดท้ายโดยใช้ ffmpeg [ซ้ำกัน]

ฉันกำลังพยายามสร้าง dashcam จากอุปกรณ์สตรีมมิ่ง RTSP โดยใช้ ffmpeg (ใน Python) ฉันใช้งานได้แล้ว แต่ฉันสูญเสียวิดีโอเล็กน้อยระหว่างการหยุดไฟล์และการเริ่มไฟล์ใหม่

รหัสเทียมของฉันมีลักษณะดังนี้:

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

เมื่อใดก็ตามที่ฉันส่งทริกเกอร์ ฉันจะรอ (สูงสุด 5 วินาที) เพื่อให้ไฟล์ปัจจุบันถูกเขียนลงดิสก์ จากนั้นฉันจะรวมไฟล์ตามจำนวนที่ต้องการเพื่อให้ได้วิดีโอที่มีความยาวตามที่ต้องการ ปัญหาคือฉันเสียเวลาระหว่างจุดหยุดและจุดเริ่มต้น

ฉันกำลังเริ่มไฟล์ใหม่ดังนี้:

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)

ฉันกำลังรอให้วิดีโอเสร็จสิ้นโดย:

self._process_handle.wait()

วิธีที่สะอาดกว่าในการทำเช่นนี้คืออะไร? ทางเลือกหนึ่งคือเขียนไฟล์ที่ยาวขึ้น จากนั้นใช้ ffmpeg เพื่อแยก N วินาทีที่ต้องการจากนั้น

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)

สิ่งนี้ทำให้ฉันต้องหยุดการบันทึกก่อนโดยส่ง 'q' ไปที่กระบวนการแล้ว:

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

แต่ไฟล์ต้นฉบับนั้น (out.mp4) จะต้องได้รับการล้างข้อมูลบ่อยๆ และหากมีเหตุการณ์เกิดขึ้น ณ จุดนั้น ฉันจะไม่สามารถเก็บข้อมูลได้


person trycatch22    schedule 25.06.2021    source แหล่งที่มา
comment
ขอบคุณ!! สิ่งเหล่านี้มีประโยชน์มาก   -  person trycatch22    schedule 26.06.2021