- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在具有两个相同捕获卡的系统上编写一个 FFmpeg 命令,因此我必须使用它们的“备用名称”,否则 FFmpeg 不明白我在调用哪个。
唯一的问题是备用名称非常长,尤其是通过 dshow 同时调用音频和视频时:
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&3886ab1a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global":audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{0E6F0DEF-2B29-4117-8D30-13F01160AC5B}"
我想在调用音频之前打破这个“字符串”中线,以使其更具可读性:
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&3886ab1a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"`
:audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{0E6F0DEF-2B29-4117-8D30-13F01160AC5B}"
但是反引号在这种情况下似乎不起作用,我猜是因为它与字符相邻?如果 I 和反引号前的空格会破坏字符串并且 FFmpeg 会出错:
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&3886ab1a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" `
:audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{0E6F0DEF-2B29-4117-8D30-13F01160AC5B}"
有没有办法在 Powershell 中将它拆分成多行?
编辑 - 全功能命令:
ffmpeg -y -hide_banner -thread_queue_size 9999 -indexmem 9999 -guess_layout_max 0 -f dshow -rtbufsize 2147.48M `
-video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&3886ab1a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global":audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{0E6F0DEF-2B29-4117-8D30-13F01160AC5B}" `
-thread_queue_size 9999 -indexmem 9999 -guess_layout_max 0 -f dshow -rtbufsize 2147.48M `
-video_size 1920x1080 -framerate 60 `
-i video="@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&24df76f&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global":audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{0A494693-5F33-4304-88D7-394757E09648}" `
-map 0:0,0:1 -map 0:1 -map 1:0,1:1 -map 1:1 -c:v h264_nvenc -r 60 -rc-lookahead 120 -forced-idr 1 -strict_gop 1 `
-sc_threshold 0 -flags +cgop -force_key_frames "expr:gte(t,n_forced*2)" -preset: llhp -pix_fmt yuv420p -b:v 250M `
-minrate 250M -maxrate 250M -bufsize 250M -c:a aac -ar 44100 -b:a 384k -ac 2 -af "aresample=async=250" -vsync 1 `
-max_muxing_queue_size 9999 -f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 `
-segment_format_options max_delay=0 C:\Users\Jordan\Videos\FFmpeg\FFmpeg%02d.ts
我的目标是打破我对视频/音频设备的要求,以更好地适应该街区的其余部分。
最佳答案
在 "..."
字符串中的一行末尾或 PowerShell 中的字符串之间使用 `
不效果相同例如,在 Bash 中使用 \
作为 line continuation 会:
虽然 `
确实在 PowerShell 中启用行继续,但如果放在一行的最后:
当在一个跨行的"..."
字符串中使用时,`
转义换行符,不删除它,这实际上是一个无操作,因为换行符在 PowerShell 字符串中文字不需要转义。
在您的尝试中,当使用between 应构成单个参数的字符串(将直接放置的字符串在一行中彼此相邻,例如 video="...":audio="..."
),`
有效地充当一个参数分隔符,因此您不能以这种方式拆分应该成为单个字符串的内容。[1]
简而言之:在 PowerShell 中,
您只能在参数之间使用续行。
为了将单个参数分布在多行中,您需要使用表达式 ((...)
);允许表达式跨多行而无需续行。
在您的情况下,一个选择是将字符串部分指定为数组 的元素,这些元素稍后加入 以形成单个字符串。
使用一个简化的例子;请注意 -join
技术如何与使用行结束符 `
共存,以将命令分散到多行参数之间:
ffmpeg -framerate 60 `
-i (@(
'video=@device_pnp_\\?\1'
'audio=@device_cm_2'
) -join ':') `
-f dshow
这将转换为以下单行执行:
ffmpeg -framerate 60 -i video=@device_pnp_\\?\1:audio=@device_cm_2 -f dshow
请注意,您的原始参数内部引号 (video="...":audio="..."
) 未被使用,因为它通常不被使用没有必要(尽管某些程序,如 msiexec
,遗憾地需要它)。
或者,如果您不介意在除最后一个以外的每个子字符串中包含 :
,您可以使用 +
进行字符串连接,如 Ted Shaneyfelt's answer指出:
ffmpeg -framerate 60 `
-i (
'video=@device_pnp_\\?\1:' +
'audio=@device_cm_2'
) `
-f dshow
PowerShell 按需自动将外部程序的参数加双引号,即如果它们包含 PowerShell 认为不在嵌入 双引号内的空格。参见 this answer了解更多信息,包括何时可能出现问题。
另一种替代方法是预先构造(仅)长参数并通过变量引用它们:
$inputSpec = @(
'video=@device_pnp_\\?\1'
'audio=@device_cm_2'
) -join ':'
ffmpeg -framerate 60 -i $inputSpec -f dshow
要通常将命令的参数分布在多行中而不必在行尾使用 `
between arguments,在 中构造参数>array 在前面,然后使用 splatting 传递它:
# Construct an array containing all arguments.
# Note: Each parameter (+ operand, if any) is placed on its own line
# here for clarity, but you're free to choose as many or few
# lines desired.
$ffmpegArgs = @(
'-y'
'hide_banner'
'-thread_queue_size', '9999'
'-indexmem', '9999'
'-guess_layout_max', '0'
'-f', 'dshow'
'-rtbufsize', '2147.48M'
'-video_size', '1920x1080'
'-framerate', '60'
'-i', (@(
'video=@device_pnp_\\?\usb#vid_07ca&pid_0570&mi_00#7&3886ab1a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global'
'audio=@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{0E6F0DEF-2B29-4117-8D30-13F01160AC5B}'
) -join ':')
)
# ...
# Pass the array via splatting - note the '@'
# (Since ffmpeg is an *external program*, passing the array
# directly, as $ffmpegArgs would work too.)
ffmpeg @ffmpegArgs
注意:
Splatting 的主要用例是启用命令参数的编程构造,并且需要不同的语法,如图所示。
This - ultimately rejected - RFC proposal提出了新的语法,这将使使用常规参数语法的多行延续更容易,而不需要在每个内部行的末尾使用 `
;拒绝的决定是here .
[1] 有关 PowerShell 如何解析复合标记的更多信息,请参阅 this GitHub issue .
关于powershell - Powershell中的行继续中间字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53575865/
猫f1.txt阿曼维沙尔阿杰贾伊维杰拉胡尔曼尼什肖比特批评塔夫林现在输出应该符合上面给定的条件 最佳答案 您可以在文件读取循环中设置一个计数器并打印它, 计数=0 读取行时做 让我们数一数++ if
我正在尝试查找文件 1 和文件 2 中的共同行。如果公共(public)行存在,我想写入文件 2 中的行,否则打印文件 1 中的非公共(public)行。fin1 和 fin2 是这里的文件句柄。它读
我有这个 SQL 脚本: CREATE TABLE `table_1` ( `IDTable_1` int(11) NOT NULL, PRIMARY KEY (`IDTable_1`) );
我有 512 行要插入到数据库中。我想知道提交多个插入内容是否比提交一个大插入内容有任何优势。例如 1x 512 行插入 -- INSERT INTO mydb.mytable (id, phonen
如何从用户中选择user_id,SUB(row, row - 1),其中user_id=@userid我的表用户,id 为 1、3、4、10、11、23...(不是++) --id---------u
我曾尝试四处寻找解决此问题的最佳方法,但我找不到此类问题的任何先前示例。 我正在构建一个基于超本地化的互联网购物中心,该区域分为大约 3000 个区域。每个区域包含大约 300 个项目。它们是相似的项
preg_match('|phpVersion = (.*)\n|',$wampConfFileContents,$result); $phpVersion = str_replace('"','',
我正在尝试创建一个正则表达式,使用“搜索并替换全部”删除 200 个 txt 文件的第一行和最后 10 行 我尝试 (\s*^(\h*\S.*)){10} 删除包含的前 10 行空白,但效果不佳。 最
下面的代码从数据库中获取我需要的信息,但没有打印出所有信息。首先,我知道它从表中获取了所有正确的信息,因为我已经在 sql Developer 中尝试过查询。 public static void m
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我试图在两个表中插入记录,但出现异常。您能帮我解决这个问题吗? 首先我尝试了下面的代码。 await _testRepository.InsertAsync(test); await _xyzRepo
这个基本的 bootstrap CSS 显示 1 行 4 列: Text Text Text
如果我想从表中检索前 10 行,我将使用以下代码: SELECT * FROM Persons LIMIT 10 我想知道的是如何检索前 10 个结果之后的 10 个结果。 如果我在下面执行这段代码,
今天我开始使用 JexcelApi 并遇到了这个:当您尝试从特定位置获取元素时,不是像您通常期望的那样使用sheet.getCell(row,col),而是使用sheet.getCell(col,ro
我正在尝试在我的网站上开发一个用户个人资料系统,其中包含用户之前发布的 3 个帖子。我可以让它选择前 3 条记录,但它只会显示其中一条。我是不是因为凌晨 2 点就想编码而变得愚蠢? query($q)
我在互联网上寻找答案,但找不到任何答案。 (我可能问错了?)我有一个看起来像这样的表: 我一直在使用查询: SELECT title, date, SUM(money) FROM payments W
我有以下查询,我想从数据库中获取 100 个项目,但 host_id 多次出现在 urls 表中,我想每个 host_id 从该表中最多获取 10 个唯一行。 select * from urls j
我的数据库表中有超过 500 行具有特定日期。 查询特定日期的行。 select * from msgtable where cdate='18/07/2012' 这将返回 500 行。 如何逐行查询
我想使用 sed 从某一行开始打印 n 行、跳过 n 行、打印 n 行等,直到文本文件结束。例如在第 4 行声明,打印 5-9,跳过 10-14,打印 15-19 等 来自文件 1 2 3 4 5 6
我目前正在执行验证过程来检查用户的旧密码,但问题是我无法理解为什么我的查询返回零行,而预期它有 1 行。另一件事是,即使我不将密码文本转换为 md5,哈希密码仍然得到正确的答案,但我不知道为什么会发生
我是一名优秀的程序员,十分优秀!