我在 Windows 上使用 FFmpeg,需要\r\n
在参数本身中插入一个。
ffmpeg … -headers "X-Test: Test\r\nX-Test-2: Test 2\r\n" …
虽然这在 Linux 等环境下可以正常工作,但在普通的 Windows 10 命令提示符下却无法正常工作。在 Windows 下的 Bash 下也无法正常工作。在这两种情况下,\r\n
都会发送文字(反斜杠、r、反斜杠、n 个字符)。
我尝试使用Alt++ ,虽然这似乎插入了字符,但它们被 FFmpeg 解释13 Alt为。100xE299AA 0xE29799
这个问题类似于如何在 cmd.exe 命令中插入新行?,但我并不依赖于 cmd.exe。如果有任何建议,我很乐意使用任何 shell,只要我可以在 Windows 下使用它。这可以通过 Powershell 以某种方式实现吗?或者,也许可以将我的参数放在文本文件中并将其作为参数值引入?
答案1
答案2
Bash 有$'…'
这样的语法。无论什么操作系统,它都应该能工作。
ffmpeg … -headers $'X-Test: Test\r\nX-Test-2: Test 2\r\n' …
形式的单词
$'string'
将受到特殊处理。单词将扩展为string
,并按照 ANSI C 标准的规定替换反斜杠转义字符。如果存在反斜杠转义序列,则按如下方式解码:[…]
\n
新队
\r
回车[…]
答案3
纯批处理解决方案。当然比 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!" …
然而,你不太可能真正需要 CR 字符,因为 C 库会'\n'
在输入/输出时自动在 和 本机换行符之间进行转换,所以你只需要使用 LF