warmshao / FasterLivePortrait

Bring portraits to life in Real Time!onnx/tensorrt support!实时肖像驱动!
504 stars 47 forks source link

ffmpeg这部分操作可以考虑用gpu加速 #75

Open Denghongyuan opened 2 months ago

Denghongyuan commented 2 months ago

使用gpu加速ffmpeg可以提升好几倍的视频处理速度 未加速 image

已加速 image

warmshao commented 2 months ago

使用gpu加速ffmpeg可以提升好几倍的视频处理速度 未加速 image

已加速 image

赞👍欢迎提pr

yuananf commented 2 months ago

可以考虑使用torchaudio的StreamWriter, StreamReader,写起来更优雅一些

Denghongyuan commented 2 months ago

可以考虑使用torchaudio的StreamWriter, StreamReader,写起来更优雅一些

作者使用ffmpeg的主要目的是把源视频的音频合并到输出视频中,torchaudio对视频的处理能力貌似不如ffmpeg

yuananf commented 2 months ago

可以考虑使用torchaudio的StreamWriter, StreamReader,写起来更优雅一些

作者使用ffmpeg的主要目的是把源视频的音频合并到输出视频中,torchaudio对视频的处理能力貌似不如ffmpeg

目前可以替代掉opencv写无音频的视频,合并音频可以再加上out_stream.write_audio_chunk

ffmpeg gpu合并音频我试过了,还是觉得有点慢,要几百毫秒

from torchaudio.io import StreamWriter

def write_video(out_path, video_frames, fps, h, w):
    out_stream = StreamWriter(out_path)
    cuda_conf = {
        "encoder": "h264_nvenc",  # Use CUDA HW decoder
        "encoder_format": "rgb0",
        "encoder_option": {"gpu": "0"},
        "hw_accel": "cuda:0",
        "frame_rate": fps,
        "height": h,
        "width": w,
    }
    out_stream.add_video_stream(**cuda_conf)
    with out_stream.open():
        out_stream.write_video_chunk(0, torch.vstack(video_frames))
warmshao commented 2 months ago

还是觉得有点慢,要几百毫秒

这个会快多少?

yuananf commented 2 months ago

还是觉得有点慢,要几百毫秒

这个会快多少?

单独计算写视频的时间没有快多少,但是由于结果不需要从cuda转到cpu,推理速度变化从22it/s => 26it/s