VLC:使用通配符通过 cmd 将媒体文件添加到播放列表

VLC:使用通配符通过 cmd 将媒体文件添加到播放列表

我使用适用于 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(通过ForEachStart-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

我更喜欢前者,因为它允许我在需要时重新排列文件顺序。

相关内容