OpenCV Python 与 FFmpeg 视音频同步问题

问题描述 投票:0回答:1

我试图使用 opencv 从捕获设备读取帧,处理它们,然后使用以下 Python 代码将它们发送到标准输出(stdout):

import cv2
import numpy as np
import subprocess
import sys


def process_frame(frame):
    // some frame processing work here 


    sys.stdout.write(frame.tobytes())
    sys.stdout.flush()


#input stream
input_dev = "/dev/video0"


# Open the input video stream
input_stream = cv2.VideoCapture(input_dev)

if not input_stream.isOpened():
    print("Error: Could not open input stream.")
    exit()

input_stream.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
input_stream.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

while True:
    ret, frame = input_stream.read()
    if not ret:
        break

    # Process the frame and send it to standard output (stdout)
    process_frame(frame)

# Release the video stream
input_stream.release()

之后我使用 ffmpeg 读取输出,并从 alsa 设备添加音频:

python ocv.py | ffmpeg \
-f alsa -thread_queue_size 1024 -ac 2 -ss 13 -i hw:2,0 \
-f rawvideo -pixel_format bgr24 -video_size 1280x720 -framerate 20 -thread_queue_size 1024 -i - \
-pix_fmt yuv420p -filter:v scale=in_color_matrix=auto:in_range=auto:out_color_matrix=bt709:out_range=tv \
-colorspace:v bt709 -color_primaries:v bt709 -color_trc:v bt709 -color_range:v tv \
-c:v libx264 -aspect 16/9 -b:v 1M -maxrate 2M -bufsize 1M -preset veryfast \
-tune fastdecode -tune zerolatency -c:a aac -b:a 128k  -f mpegts udp://224.0.0.1:1206?pkt_size=1316

正如我所指出的,存在音频/视频同步问题,因为音频大约领先视频 8 秒,可能是由于使用 OpenCV 进行帧处理所致。

尝试过:

-filter:a "adelay=8000|8000"
-itsoffset 8.0 (before the audio input) 

但它们似乎都不起作用,或者也许我使用了错误的命令形式。

如果有的话,谁能指导一下音频和视频自动同步的方法吗?如果不是,使音频延迟约 8 秒的命令的正确形式是什么?

opencv ffmpeg alsa
1个回答
0
投票

您是否尝试过使用 -use_wallclock_as_timestamps 选项? 然后,分数将被分配给系统的时钟

© www.soinside.com 2019 - 2024. All rights reserved.