作 ▸
ffmpeg で複数の headers を指定するにはCRLFで区切らないといけない
ネット見てると ffmpeg
に複数の -headers
を指定してる記事がちらほらあるのだが……
Ubuntu 20.04ffmpeg 3.4.8-0ubuntu0.2
-loglevel debug
をつけて聞いてみろ。
ffmpeg \
-headers 'X-Hogehoge: hogege' \
-headers 'X-Piyopiyo: piyoyo' \
-i 'http://example.com/path/to/playlist.m3u8' \
-loglevel debug
-acodec copy output.aac
request: GET /path/to/playlist.m3u8 HTTP/1.1
User-Agent: Lavf/57.83.100
Accept: */*
Range: bytes=0-
Connection: close
Host: example.com
Icy-MetaData: 1
X-Piyopiyo: piyoyo
ついてないじゃん X-Hogehoge
がー!!!
後から指定した -headers 'X-Piyopiyo: piyoyo'
に上書きされてしまったのだ。
X-Hogehoge
X-Piyopiyo
ともつけたければ、以下のように単一の -headers
オプション中で改行コード (CRLF) で区切って指定する必要がある。(bashの場合)
ffmpeg \
-headers 'X-Hogehoge: hogege'$'\r\n''X-Piyopiyo: piyoyo' \
-i 'http://example.com/path/to/playlist.m3u8' \
-loglevel debug
-acodec copy output.aac
request: GET /path/to/playlist.m3u8 HTTP/1.1
User-Agent: Lavf/57.83.100
Accept: */*
Range: bytes=0-
Connection: close
Host: example.com
Icy-MetaData: 1
X-Hogehoge: hogege
X-Piyopiyo: piyoyo
このことは下記のコメントで見て知った。
video - ffmpeg - How to pass http headers? - Stack Overflow
なお、同じことをコマンドプロンプト (Windows) でやるのは面倒な模様。改行コードをコマンドライン引数で渡すのが難しいようだ。
以上!