WindowsでFFmpegを使用していて、パラメーター自体に\r\n
を挿入する必要があります。
ffmpeg … -headers "X-Test: Test\r\nX-Test-2: Test 2\r\n" …
これはLinuxなどでは正常に機能しますが、通常のWindows10コマンドプロンプトでは機能しません。また、WindowsのBashでは機能しません。どちらの場合も、リテラル\r\n
(バックスラッシュ、r、バックスラッシュ、n文字)がで送信されます。
使ってみました Alt+13Alt+10、そしてこれは文字を挿入するように見えましたが、FFmpegによって0xE299AA 0xE29799
として解釈されました。
この質問は cmd.exeコマンドに新しい行を挿入するにはどうすればよいですか? に似ていますが、cmd.exeに縛られていない点が異なります。何か提案があれば、Windowsで使用できる限り、どのシェルでも使用できます。これはどういうわけかPowershell経由で可能ですか?または、パラメータをテキストファイルに入れて、パラメータ値として取り込むことでしょうか。
PowerShellでは、次を使用できます コマンドのr
部分のn
とCRLF
の前のバックスラッシュの代わりにバッククォートを使用します—backtick "r 「バッククォート」n。
これには、既存のコマンドへのこの変更のみが必要です
ffmpeg … -headers "X-Test: Test`r`nX-Test-2: Test 2`r`n"
Special characters Special characters are used to format/position string output. `r`n Carriage return + New line
バッククォートキー
Bashには、このための$'…'
構文があります。 OSに関係なく動作するはずです。
ffmpeg … -headers $'X-Test: Test\r\nX-Test-2: Test 2\r\n' …
From Bashリファレンスマニュアル :
$'string'
の形式の単語は特別に扱われます。 Wordはstring
に展開され、バックスラッシュでエスケープされた文字がANSIC標準で指定されているように置き換えられます。バックスラッシュエスケープシーケンスが存在する場合は、次のようにデコードされます。[…]
\n
改行
\r
キャリッジリターン[…]
純粋なバッチソリューション。もちろん、PowerShellよりもはるかに悪いので、参照用です
setlocal EnableExtensions EnableDelayedExpansion
rem Get CR and LF characters
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
(set LF=^
%=EMPTY=%
)
ffmpeg … -headers "X-Test: Test!CR!!LF!X-Test-2: Test 2!CR!!LF!" …
ただし、Cライブラリは入出力時に'\n'
とネイティブの改行文字の間で自動的に変換されるため、CR文字が実際に必要になる可能性は低く、LFを使用するだけで済みます。