我使用适用于 Windows x64 的 VLC 3.0.11,并希望使用通配符通过 cmd 将媒体文件添加到新播放列表。例如:
"C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" ??? "*.ts"
我应该用什么来代替????
谢谢
答案1
我应该用什么来代替????
我不知道原生 VLC 选项是否只包含特定类型的文件。基于命令行文档(也可以通过例如vlc -H
)VLC 中最接近的选项似乎是--ignore-filetypes
允许排除某些文件的扩展名,例如:
vlc --ignore-filetypes=jpg,log,m3u,cue "C:\path to files"
请注意,据我所知,--ignore-filetypes
似乎仅在 VLC 首次启动时应用。在 Windows 上的 VLC 3.0.11(2020 年 7 月)中进行测试时,使用不同的扩展参数运行第二个 VLC--one-instance
调用似乎没有效果。--playlist-enqueue
--ignore-filetypes
使用脚本
话虽如此,基于你发表的评论这个答案,你也许能够使用基于 VLC--one-instance
和--playlist-enqueue
选项的脚本实现你的目标,例如 Windows电源外壳:
例如 vlcq.ps1
# Use basic wildcard notation (ex. "*.mp3") to place
# matching file names from a directory into a VLC
# playlist.
# Set to ex. "C:\path to files\*.mp3" via the command-line
$playlist_path = $args[0]
# Turn ex. "C:\path to files\*.mp3" into ex. "C:\path to files\*"
$playlist_directory = Split-Path -Path $playlist_path
$playlist_directory = $playlist_directory + '\*'
# -Leaf returns the last item or container in a path
# (ex. "*.mp3")
$file_type = Split-Path -Path $playlist_path -Leaf
# Place any matching file names/paths into a $file_list
# $file_list = Get-ChildItem C:\path to files\* -Include *.mp3
$file_list = Get-ChildItem $playlist_directory -Include $file_type
# "Pre-load" VLC for (arguably) better intial playback, etc.
# Start-Process vlc -ArgumentList '--one-instance'
Start-Process "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" -ArgumentList '--one-instance'
foreach ($file in $file_list) {
# Add quotes to $file output, since this may contain spaces.
$quoted_file_path = '"' + $file + '"'
# Queue up the item in the current VLC playlist.
# Start-Process vlc -ArgumentList '--one-instance', '--playlist-enqueue', $quoted_file_path
Start-Process "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" -ArgumentList '--one-instance', '--playlist-enqueue', $quoted_file_path
# Add a delay between loading files to help avoid playlist
# jumbling. May not be 100% effective.
Start-Sleep -Seconds 2
}
在哪里:
$args[0]
是一个 PowerShell 变量,包含脚本名称后的第一个命令行值(例如,类似 的路径\通配符组合C:\path to files\*.mp3
)。\*
附加到$playlist_directory
以确保-Include
选项获取子项正常工作(没有 final\*
,可能会生成一个空列表)。
请注意,此脚本假设播放单个播放列表。不幸的是,循环对我来说似乎不太有效。
用法
复制上述脚本并将其另存为 ex. vlcq.ps1
。您可以使用任何喜欢的文件名,但一定要将其另存为.ps1
(PowerShell 脚本)文件。
假设您在与保存的脚本(上面)相同的目录中打开了一个命令窗口.ps1
,然后您可以使用通配符将文件加载到 VLC 播放列表中,如下所示:
powershell -file .\vlcq.ps1 "C:\path to\*.mp3"
请注意,您可能需要启用 PowerShell 脚本执行在运行上述命令之前。
助手批次
如果上面的命令有点长,可以将其包装在批处理文件中,例如:
例如 vlcq.bat
@ECHO Off
powershell -file "C:\path to\vlcq.ps1" %*
vlcq "C:\path to\*.mp3"
然后只需在与 eg 相同的目录中运行 ex. 即可vlcq.bat
。如果您希望 ex. vlcq
(又名vlcq.bat
) 在命令行的任何地方可用,您可以随时将其放置在 Windows 路径下的文件夹中。
路径注释
传递给当前本地目录中项目的脚本的路径将是
.\
(例如.\*.mp3
)。*.mp3
只是一个例子。此语法适用于任何媒体类型(即*.ts
)。请注意,此脚本有一个潜在的附带好处,即它可以将目录中的多个图像排队(这通常似乎不可能仅通过例如来实现vlc "C:\path\to\images"
)。如果您提供不存在的扩展名等(即,您使用
*.mp3
不包含文件的目录.mp3
),VLC 将启动(通过第一个Start-Process
命令),但不会将任何文件添加到播放列表中。您可以使用
*.*
,但请注意,它将完全按照其说明执行操作。也就是说,它将加载目录中的所有文件(包括任何非媒体文件)。您可以使用简单的 Windows 正则表达式来选择扩展名之外的项目(例如,
A*.mp3
将选择.mp3
以 开头的文件A
)。将路径传递给上述脚本时,一些包含非标准字符(例如
[]
)的文件路径可能无法正确加载,即使它们在 Windows 中通常不是问题。
注意事项
请记住,
Start-Process
上述 PowerShell 脚本中的命令需要一个有效的 VLC 路径(假设 VLC 不能从命令行使用vlc
)。小心播放列表混乱。简而言之,为每个文件调用 VLC(通过
ForEach
和Start-Process
)可能会导致某些文件在当前播放列表中加载顺序错误(与目录中的顺序相比)。在每次调用加载文件(通过 )后使用例如 2 秒的延迟Start-Sleep -Seconds 2
似乎大多缓解这种情况,但仍然有可能出现某些文件无序加载的情况(取决于 VLC 加载时间)。虽然初始自动播放不会受到影响,但延迟文件加载意味着加载目录中的所有项目可能需要一些时间(在后台),而例如简单地使用 ex. 打开目录
vlc "directory name"
(几乎是即时的)。作为实际的副作用,在脚本加载所有这些文件之前关闭 VLC 将导致 VLC 重新打开并开始播放脚本最后加载的文件。关于命令,如果路径不包含空格,则从技术上讲,既不需要
powershell
路径周围的双引号,也不-file
需要选项,但带有空格的路径将powershell
不是没有它们也能正常工作(您将获得一个充满基本上无效项目的播放列表)。如果您向上面的基本
powershell
命令添加任何选项,-file
则应为提供的最终选项。
PowerShell 参考
答案2
(电源外壳)
要在 vlc 中快速打开文件(您可以稍后使用 GUI 将它们保存到文件中):
(ls *.ts) | %{vlc --one-instance --playlist-enqueue $_}
首先保存到文件,然后在 vlc 中加载:
(ls *ts).FullName | Out-File -Encoding ascii index.m3u -Append
vlc index.m3u
我更喜欢前者,因为它允许我在需要时重新排列文件顺序。