代码之家  ›  专栏  ›  技术社区  ›  swagrov

Python ffmpeg:覆盖视频将删除所有音频

  •  3
  • swagrov  · 技术社区  · 6 年前

    我正在使用ffmpeg python( source blurred video background

    问题是输出没有音频连接。因为剪辑是相同的,所以我希望在最终输出中保留其中一个剪辑的音频。我怎样才能保留音频?(但是,我不想覆盖两个音频并获得回声效果!)

    这是我正在使用的函数:

    import ffmpeg
    def add_blurred_bg():
        HEIGHT = 720 
        WIDTH = 1280
        in_file = ffmpeg.input('input.mp4')
        probe = ffmpeg.probe('input.mp4')
        video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
        iw=int(video_stream['width'])
        ih=int(video_stream['height'])
        nw = HEIGHT*iw/ih
        (
            ffmpeg
            .overlay(
                in_file.filter('scale', WIDTH, -2).crop(0,(WIDTH*HEIGHT/nw-HEIGHT)/2,WIDTH,HEIGHT).filter('gblur', sigma=40),
                in_file.filter('scale', -2, HEIGHT),
                x=(WIDTH-nw)/2
            )
            .output('output.mp4')
            .run()
        )
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   xilpex    6 年前

    你一定要做吗 音频风格?你能把音频和视频混合起来吗?如果是这样的话,这是一个混乱但有效的例子:

    import ffmpeg
    import os
    
    def add_blurred_bg():
        HEIGHT = 720 
        WIDTH = 1280
        inp = 'input.mp4'
        os.system("ffmpeg -i " + inp + " -f mp3 -ab 192000 -vn music.mp3")
        print("extracting audio...")
        in_file = ffmpeg.input(inp)
        probe = ffmpeg.probe('input.mp4')
        video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
        iw=int(video_stream['width'])
        ih=int(video_stream['height'])
        nw = HEIGHT*iw/ih
        (
           ffmpeg
           .overlay(
                in_file.filter('scale', WIDTH, -2).crop(0,(WIDTH*HEIGHT/nw-HEIGHT)/2,WIDTH,HEIGHT).filter('gblur', sigma=40),
                in_file.filter('scale', -2, HEIGHT),
                x=(WIDTH-nw)/2
            )
            .output('outputPartial.mp4')
            .run()
        )
        print("bluring...")
        os.system("ffmpeg -i outputPartial.mp4 -i music.mp3 -shortest -c:v copy -c:a aac -b:a 256k output.mp4")
        print("mixing...")
        os.remove("outputPartial.mp4")
        os.remove("music.mp3")
        print("cleaning up...")
        print("done!")
    

    我不知道你为什么有这个问题,但这里有一个解决办法。

    步骤1: 提取音乐

    模糊视频

    步骤3: 把音频和视频混合起来

    步骤4: