簡體   English   中英

使用文件輸入時無法設置ffmpeg標頭

[英]Can't set ffmpeg header when using file for input

我正在嘗試為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

不確定為什么通過文件讀取輸入會影響標題發送。 現在,解決方法是使用一個字符串將所有輸入連接起來(比我想要的還亂一些),但是我很好奇是否有人知道為什么會這樣。

更新 :根據這篇文章,我必須通過一個文本文件讀取輸入內容,所以我回到正題。

當將單個輸入直接輸入到ffmpeg( -i )時,可以在其上設置各種選項,具體取決於輸入閱讀器允許和識別的內容。

但是,FFmpeg本身不會從文本文件中讀取輸入列表。 有一個名為concat demuxer的定制模塊,由-f concat調用,該模塊解析輸入列表,打開每個文件並將其串聯。 對於主要的ffmpeg管道,這是由concat模塊生成的單個輸入。 而且concat模塊不會識別或保留用於文本文件中列出各個文件的選項。 所有列出的文件只能使用其各自的解復用器/解碼器/協議..etc的默認參數打開。 這是一個限制。 您可以在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不會失去質量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM