使用nodeJS exec函数从一个新进程运行我的命令会覆盖我的反斜杠,这会使我的命令无效。如何防止这种情况或使用解决方案?
我需要最后一个命令如下所示:...drawtext=text='timestamp \: %{pts \: localtime...
使用该代码,\:
被转义为:
。
使用\\:
被转义为\\:
,而我期望使用\:
如何运行...drawtext=text='timestamp \: %{pts \: localtime...
?
// This command works if pasted directly into terminal
const ffmnpegCode = `ffmpeg -i /path/input.mp4 -y -r 25 -ss 0 -to 124 -c:v libx264 -c:a aac -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,drawtext=text='timestamp \: %{pts \: localtime \: 1665679092.241 \: %m-%d-%Y %H\\\\\:%M\\\\\:%S}': x=(w-text_w-10): y=(h-text_h-5): fontsize=45: fontcolor=white@0.9: box=1: boxcolor=black@0.6: fontfile='/path/OpenSans-Regular.ttf'" /path/output.mp4`
const encode = async ffmpegCode => {
try {
await execPromise(ffmpegCode);
return 200
} catch (err) {
console.log(err)
}
}
JS添加了额外的\
,这会破坏我的命令
2条答案
按热度按时间a1o7rhls1#
事实证明,JS确实试图在运行我的命令之前对我的特殊字符进行转义,所以诀窍是使用
String.raw()
const command = String.raw
...drawtext=text='timestamp : %{pts : localtime...``myzjeezk2#
如果您不需要任何shell功能,请使用
execFile
或spawn
,它们允许您指定直接传递给exec的参数数组,因此不需要任何shell转义。不需要shell引号或转义,只需要JS字符串转义序列(如
\\
,用于命令获取\
)