You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中用FFmpeg实现音频延迟:音视频流同步处理需求

解决方案

要实现前34秒无音频、音频从34秒开始播放且结束后视频随即终止的需求,你可以通过以下步骤修改代码:

  1. 获取音频时长:读取音频文件的时长,计算视频需要保留的总时长(34秒 + 音频时长),确保视频与音频同步结束。
  2. 截取视频片段:将原视频截断到计算出的总时长,避免视频过长。
  3. 延迟音频播放:用itsoffset滤镜让音频从视频的34秒位置开始播放。
  4. 合并流并添加字幕:保留原有的字幕绘制逻辑,将处理后的视频和音频合并输出。

修改后的完整代码

import ffmpeg
import textwrap

readAloudText = "The medical center issued a statement saying that patient care was not compromised while their data was unavailable. Still, it's unsettling to hear that a hospital is shut out of parts of its own computer systems and unable to communicate electronically."

# 简化字幕换行逻辑
wrapper = textwrap.TextWrapper(width=150) 
word_list = wrapper.wrap(text=readAloudText) 
caption_new = '\n'.join(word_list)

# 获取音频时长,计算视频需保留的总时长
audio_probe = ffmpeg.probe('readaloudaudio.wav')
audio_duration = float(audio_probe['format']['duration'])
video_end_time = 34 + audio_duration

# 处理视频:截取到指定时长,修正时间戳,禁用原视频音频避免冲突
in_video = (
    ffmpeg.input('readaloud.mov')
    .trim(start=0, end=video_end_time)
    .setpts('PTS-STARTPTS')
    .audio.disable()
)

# 处理音频:添加34秒偏移,让音频从视频34秒处开始播放
in_audio = ffmpeg.input('readaloudaudio.wav').filter('itsoffset', 34)

# 添加字幕并合并输出
(
    ffmpeg
    .drawtext(in_video, text=caption_new, fontcolor='black', fontsize=24, x=50, y=600)
    .output(in_audio, 'output.mp4', vcodec='libx264', acodec='aac')
    .run(overwrite_output=True)
)

关键说明

  • ffmpeg.probe:读取音频元数据获取准确时长,保证视频截断时间精准。
  • trim + setpts:trim截取视频后,setpts修正时间戳,避免播放跳帧或卡顿。
  • itsoffset滤镜:实现音频时间偏移,让音频在视频播放到34秒时启动。
  • audio.disable():禁用原视频音频轨道,确保最终输出仅包含处理后的目标音频流。

内容的提问来源于stack exchange,提问作者snailoftheyear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:40:25