Python ffmpeg: наложение видео сбрасывает все аудио - PullRequest
0 голосов
/ 18 февраля 2019

Я использую 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()
    )

1 Ответ

0 голосов
/ 18 февраля 2019

Вы должны сделать это сохранить стиль звука?Можете ли вы смешать аудио и видео?Если это так, то это грязный, но работающий пример:

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: Извлечение музыки

ШАГ 2: Размытие видео

ШАГ 3: Микширование аудио и видео

ШАГ 4: Очистка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...