在使用ffmpeg与音转文模型时,会报错音转文stack expects a non-empty Tensor List

发布于:2025-09-09 ⋅ 阅读:(14) ⋅ 点赞:(0)

音频文件已经成功生成,但是音转文报错。

错误问题需要定位到音频文件,音频文件一定是出错了,导致音转文输入时没有内容,自然会报错。

一、首先拉流,拉取rstp视频流,能够拉取并正常显示。

二、使用python代码拉取视频流,也是能够正常拉取。

import cv2
 
cap = cv2.VideoCapture('rtsp://admin:Jhx134679@192.168.1.222:554/Streaming/Channels/101')
 
print(cap)
ret,frame = cap.read()
while ret:
    ret,frame = cap.read()
    cv2.imshow("current frame",frame)
    cv2.imwrite('frame.jpg', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()
cap.release()

三、根据音转文模型,针对生成的文件进行识别,错误信息与项目中运行一致,从而断定是在Ffmpeg视频生成模块出现问题。

最终解决方案

针对rstp视频流:必须添加 -rtsp_transport tcp(且放在 -i 之前),否则可能因 UDP 丢包导致音视频为空。

原代码:

command = (
            f"ffmpeg -i {self.rtsp_url} -rtsp_transport tcp -movflags +faststart "
            f"-f segment -segment_time {self.segment_duration} -reset_timestamps 1 -strftime 1 "
            f"-map 0:a -c:a pcm_s16le {segment_wav} "
            f"-f segment -segment_time {self.segment_duration} -reset_timestamps 1 -strftime 1 "
            f"-map 0:v -map 0:a -c:v copy -c:a aac {segment_mp4}"
        )
        

改进后:

command = (
        f"ffmpeg -rtsp_transport tcp "  # 1. 先指定RTSP传输模式(TCP必须在输入前)
        f"-i ***** "          # 2. 输入RTSP流
        f"-map 0:a:0 "                  # 3. 明确提取第1个音频轨道(0:a:0 = 流0的音频轨道0)
        f"-c:a pcm_s16le "              # 4. 音频编码(WAV标准格式)
        f"-ar 16000 "                   # 5. 强制采样率16000Hz(避免格式不兼容)
        f"-ac 1 "                       # 6. 强制单声道(简化处理)
        f"-f segment "                  # 7. 切片输出
        f"-segment_time 10 "  # 切片时长(如10秒)
        f"-reset_timestamps 1 "         # 重置每个切片的时间戳
        f"-strftime 1 "                 # 用时间戳命名文件
        f""               # 音频输出路径
        
        # 视频切片参数(补充轨道指定)
        f"-map 0:v:0 -map 0:a:0 "       # 明确提取第1个视频轨道+第1个音频轨道
        f"-c:v copy -c:a aac "          # 视频复制编码,音频AAC编码
        f"-f segment "
        f"-segment_time 10 "
        f"-reset_timestamps 1 "
        f"-strftime 1 "
        f""                # 视频输出路径
    )

        针对不同的视频流格式(RTSP、HTTP-FLV、HTTPS-FLV),需要调整 FFmpeg 命令的部分参数,主要差异体现在「传输协议配置」和「输入参数适配」上。直接使用相同的命令可能导致拉流失败(如连接超时、格式不支持)。


网站公告

今日签到

点亮在社区的每一天
去签到