ฉันกำลังพยายามสร้าง 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) จะต้องได้รับการล้างข้อมูลบ่อยๆ และหากมีเหตุการณ์เกิดขึ้น ณ จุดนั้น ฉันจะไม่สามารถเก็บข้อมูลได้
-segment_wrap
ได้ ดู ตัด (ลบเฟรมออกจาก) วิดีโอสดจากเว็บแคมโดยใช้ python, FFmpeg คัดลอกสตรีมสด (จำกัดไฟล์ไว้ที่ 60 วินาที), สตรีม MJPEG ไปที่ไฟล์ แต่เก็บเฉพาะไฟล์สุดท้ายเท่านั้น นาที - person llogan   schedule 26.06.2021