Пробелы во входных данных FFMPEG Препятствуют выполнению

#python #ffmpeg #subprocess #pathlib

Вопрос:

Что так озадачивает, так это то, почему пробелы на аудиовходе, похоже, работают нормально, но пробелы на видеовходе нарушают работу. Это позволяет извлекать случайные изображения из каталога, сопоставлять их со случайными аудиоклипами и объединять их в видео mp4.

 def makeAudioImgMovs():
    randImgs = getImgs()
    compAudClips = makeAudioClips()
    audioJpgs = dict(zip(randImgs,compAudClips)) #Heres where we join the completed audio clips and the jpgs into a dict
    for jpg, aud in audioJpgs.items():
        print(f'The img is {jpg}, the type of the img is {type(jpg)} the aud is {aud} the type of the aud is {type(aud)}')
        subprocess.call('ffmpeg -hide_banner -loglevel error -loop 1 -i "{0}" -i "{1}"
        -filter:v 
        "fade=in:st=0:d=1, fade=out:st=10:d=1,scale=720:480:force_original_aspect_ratio=decrease,pad=720:480:(ow-iw)/2:(oh-ih)/2,setsar=1" 
         -filter:a "afade=in:st=0:d=1, afade=out:st=10:d=1" 
        -c:v libx264 -t 11 -pix_fmt yuv420p -preset faster -shortest -c:a aac {2}.mp4'.format(jpg,aud,timePath/(pathlib.Path(jpg).stem)),shell=True)
makeAudioImgMovs()
 

В заявлении о печати записывается то, что находится в списке диктовки AUDIOJPG. Например…

img-это 2021-09-02-1-40/ponty_me.jpg, тип img <класс ‘pathlib.PosixPath’> aud 2021-09-02-1-40/Jms Brn, как и было.aiff тип aud <класс ‘pathlib.PosixPath’><класс ‘pathlib.PosixPath’>

Img-2021-09-02-1-40/1966taxiToMassFromMomBack 2.tiff, тип img — <класс ‘pathlib.PosixPath’> aud-2021-09-02-1-40/Lola_Fay.mp3 тип aud — <класс ‘pathlib.PosixPath’><класс ‘pathlib.PosixPath’>

[NULL @ 0x7fe503021400] Не удалось найти подходящий формат вывода для ‘2021-09-02-1-40/1966taxiToMassFromMomBack’ 2021-09-02-1-40/1966taxiToMassFromMomBack: Неверный аргумент

Img-2021-09-02-1-40/1966taxiToMassFromMomBack 5.tiff, тип img — <класс ‘pathlib.PosixPath’> aud-2021-09-02-1-40/M Жалоба Миллера Лонни.aiff тип aud — <класс ‘pathlib.PosixPath’><класс ‘pathlib.PosixPath’>

[NULL @ 0x7fd32a854c00] Не удалось найти подходящий формат вывода для ‘2021-09-02-1-40/1966taxiToMassFromMomBack’ 2021-09-02-1-40/1966taxiToMassFromMomBack: Неверный аргумент

Img 2021-09-02-1-40/10_021390_danny? 1_jpg.jpg, тип img <класс ‘pathlib.PosixPath’> aud 2021-09-02-1-40/i_got_to_rock.mp3 тип aud <класс ‘pathlib.PosixPath’><класс ‘pathlib.PosixPath’>

[NULL @ 0x7f8449835800] Не удалось найти подходящий формат вывода для ‘2021-09-02-1-40/10_021390_danny?’ 2021-09-02-1-40/10_021390_danny?: Недопустимый аргумент

img-это 2021-09-02-1-40/11_021390_danny_2_jpg.jpg, тип img <класс ‘pathlib.PosixPath’> aud 2021-09-02-1-40/M Мощность Миллера.aiff тип aud <класс ‘pathlib.PosixPath’><класс ‘pathlib.PosixPath’>

Последняя пара img/aud завершается нормально и записывается в формате mp4. Обратите внимание, что в аудиофайле есть пробелы! Обратите внимание, что ошибка «Недопустимый аргумент» появляется там, где в имени файла jpg есть пробел.

Помощь очень признательна.

Комментарии:

1. Попробуйте создать строку вашей команды, например cmd = f'ffmpeg -hide_banner -loglevel ...' , а затем распечатать эту строку для проверки, прежде чем передавать ее subprocess.call(cmd, ...)

2. Очень запутанно… распечатка команды ffmpeg дает мне то, что выглядит как хорошо отформатированный ввод. ffmpeg -hide_banner -loglevel error -loop 1 -i "2021-09-02-12-20/1966taxiToMassFromMomBack 3.tiff" ... Но копирование его непосредственно в командную строку приводит к той же ошибке. Unable to find a suitable output format for '2021-09-02-12-20/1966taxiToMassFromMomBack' Где ffmpeg отрезал путь в месте в имени файла.

Ответ №1:

Здесь вам нужно использовать двойные кавычки:

 ffmpeg ... -c:a aac "{2}.mp4"
 

Комментарии:

1. Боже мой, сэр, вы герой!