我正在编写这个 Powershell 脚本:
$URL = "https://www.youtube.com/watch?v=KbuwueqEJL0"
$from = 00:06:15
$to = 00:09:17
$cmdOutput = (youtube-dl --get-url $URL)
ffmpeg -ss $from -to $to -i <video_url> -ss $from -to $to -i <audio_url> output.mkv
此脚本的目的是下载 YouTube 视频的一部分。我设置了变量 $URL 来指定 Youtube URL,而
$from
和 $to
是我要下载的部分的开始和结束时间。
$cmdOutput
用于输出流 URL。输出将有两行:第一行是视频流的 URL,第二行是音频流的 URL。
目前,我不知道如何将输出用作变量并指定 $cmdOutput 的行号以将其放入正确的流中。我猜
<video_url>
和 <audio_url>
会被 $cmdOutput[line 1]
和 $cmdOutput[line 2]
之类的东西取代,尽管我知道这些是不正确的。
我查阅了这个答案,写这个脚本对我来说很方便。我还阅读了Boris Lipschitz的答案,了解如何使用Python做同样的事情,但他的答案不起作用。
在该脚本中,
-ss <start_time>
标志输入搜索点,-t <duration>
标志告诉FFmpeg在指定的持续时间后停止编码。例如,如果开始时间为 00:02:00,持续时间为 00:03:00,FFmpeg 将从 00:02:00 到 00:05:00 下载,这不是预期的结果。由于某种原因,即使我将 -t
标志替换为 -to <end_time>
,他的 Python 脚本也会跳过前 5 秒的输出。我尝试编辑他的脚本,但除非您明确指定视频和音频流的时间以及它们各自的流 URL,否则它不起作用。
# updated for current versions
# yt-dlp version 2024.10.22 and
# ffmpeg #version 7.1
# Prereqs use PS or CMD to Install.
# winget yt-dlp
# winget ffmpeg
# Define URL and time ranges.
$URL = "https://www.youtube.com/watch?v=05j8Ai9riEM&list=PPSV"
$from = "00:00:00"
$duration = "00:02:14"
# Download and merge video and audio into 'full_video.mkv'.
yt-dlp -f bestvideo+bestaudio --merge-output-format mkv -o
"full_video.mkv" $URL
# Use FFmpeg to extract the specific portion of the video.
ffmpeg -i "full_video.mkv" -ss $from -t $duration -c copy output.mkv