Не удается установить заголовок ffmpeg при использовании файла для ввода - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь установить заголовки (, как предлагается здесь ) для моей команды ffmpeg concat следующим образом:

ffmpeg \
    -f concat \
    -safe 0 \
    -protocol_whitelist file,http,https,tcp,tls \
    -headers $'Content-Type: audio/wav\r\n' \
    -i 'inputs.txt' \
    -c 'copy' 'output.wav' \
    -v trace

, где мой входной файл структурирован так:

file 'https://path/to/file1'
file 'https://path/to/file2'
file 'https://path/to/file3'

Однако, когда я запускаю команду, ffmpeg не устанавливает заголовки, как видно из вывода -v:

[http @ 0x7fa133d01080] request: GET / HTTP/1.1
User-Agent: Lavf/58.20.100
Accept: */*
Range: bytes=0-
Connection: close
Host: localhost:3001
Icy-MetaData: 1

Что странно, если я задаю свой вводне через ввод txt, а через -i /path/to file (как видно ниже) он работает просто отлично.

ffmpeg \
    -f concat \
    -safe 0 \
    -protocol_whitelist file,http,https,tcp,tls \
    -headers $'Content-Type: audio/wav\r\n' \
    -i 'https://google.com' \
    -c 'copy' 'output.wav' \
    -v trace

Вывод -v:

[https @ 0x7fed3ac03940] request: GET / HTTP/1.1
User-Agent: Lavf/58.20.100
Accept: */*
Range: bytes=0-
Connection: close
Host: google.com
Icy-MetaData: 1
Content-Type: audio/wav

Не уверен, зачем читать входные данныечерез файл будет влиять на отправку заголовков.В настоящее время обходной путь - использовать строку, объединяющую все входные данные (немного сложнее, чем хотелось бы), но мне любопытно, если кто-нибудь может знать, почему это происходит.

ОБНОВЛЕНИЕ : Согласно этой записи я должен читать входные данные через текстовый файл, поэтому я возвращаюсь к исходной точке ....

1 Ответ

0 голосов
/ 20 января 2019

Когда один вход направляется на ffmpeg (-i), для него могут быть установлены различные опции, в зависимости от того, что считыватель ввода разрешает и распознает.

Однако FFmpeg не читает исходный список из текстового файла. Есть специальный модуль под названием concat demuxer, вызываемый -f concat, который анализирует список ввода, открывает каждый файл и объединяет их. Для основного конвейера ffmpeg это представляется как один вход, сгенерированный модулем concat. И модуль concat не распознает и не переносит параметры, предназначенные для отдельных файлов, перечисленных в текстовом файле. Все перечисленные файлы могут быть открыты только с параметрами по умолчанию соответствующих демультиплексоров / декодеров / протоколов ... и т. Д. Это ограничение. Вы можете открыть запрос функции на trac.ffmpeg.org, чтобы изменить это.

Что вы можете сделать, это прочитать все входные данные напрямую.

ffmpeg \
    -headers $'Content-Type: audio/wav\r\n' \
    -i 'https://google1.com' \
    -headers $'Content-Type: audio/wav\r\n' \
    -i 'https://google2.com' \
    -headers $'Content-Type: audio/wav\r\n' \
    -i 'https://google3.com' \
    -headers $'Content-Type: audio/wav\r\n' \
    -i 'https://google4.com' \
    -filter_complex "[0][1][2][3]concat=n=4:v=0:a=1" \
    'output.wav'

Для входов WAV перекодирование в WAV не приведет к снижению качества.

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