如何使用 youtube-dl 或其他方式下载视频的一部分?

I'm*_*ere 15 video youtube-dl

我希望能够只下载视频的一部分。例如,能够指定下载的开始和/或结束时间。因此,当用户输入视频的开始和结束时间时,它应该只下载时间戳内的剪辑部分。这可能吗?

and*_*.46 23

确实有许多在线技术可以实现这一点。一种相当基本的技术是以下一种衬垫,它在我的系统上使用 YouTube 剪辑运行良好:

ffmpeg -i $(youtube-dl -f 18 --get-url https://www.youtube.com/watch?v=ZbZSe6N_BXs) \
-ss 00:00:10 -t 00:00:30 -c:v copy -c:a copy \
happy.mp4
Run Code Online (Sandbox Code Playgroud)

在此示例中,控制剪辑开始和结束的 2 个部分是:

  1. -ss 00:00:10:放置输入文件之后,它编码并丢弃样本直到 10 秒标记。这比在输入文件之前放置搜索选项(输入搜索)更慢且效率更低,但在本示例中效果更好(特别是复制音频和视频流时
  2. -t 00:00:30 : 这指定了编码的持续时间,在这种情况下只有 30 秒

我已经在 YouTube 上进行了广泛的测试,并且在我自己的系统上一切正常......

参考:


小智 10

使用该--postprocessor-args参数传递ffmpeg要编辑的音频/视频输出(处理器)。显然,ffmpeg需要安装。

--postprocessor-args接受 3 个参数和值(这只是一个例子,查看ffmpegwith 的手册页man ffmpeg了解更多):

  • -ss HH:MM:SS : 开始时间
  • -to HH:MM:SS : 时间结束
  • -t HH:MM:SS : 需要的时间长度

例子:

PS: youtube-dl将在处理之前下载整个媒体,然后将其删除。


Sim*_*n B 8

管道工工具可以让您轻松完成此操作安装应用程序:

snap install plumber
Run Code Online (Sandbox Code Playgroud)

安装后,它将出现在您的应用程序菜单中。

运行应用程序时,将所需的 YouTube 链接粘贴到框中(在下面的屏幕截图中以红色突出显示),或通过单击 YouTube 图标(以黄色突出显示)来使用内置的 YouTube 搜索功能。

选择起点和终点。您可以将结果保存为视频或 gif。 水管工申请窗口


Lou*_*dox 7

这里没有分享的一个不错的替代方案是yt-dlpyoutube-dl它的一个分叉受到速率限制的阻碍要小得多。当给定选项时,它的计时是准确的(“尽管较慢”)--force-keyframes-at-cuts

yt-dlp --download-sections "*1:00:00-1:00:30" --force-keyframes-at-cuts [video_url]
Run Code Online (Sandbox Code Playgroud)

我还传递了--extract-audio --audio-format mp3选项并使用以下命令检查了生成文件的真实长度ffprobe

ffprobe extracted_clip.mp3 2>&1 | grep Duration
  Duration: 00:00:30.02, start: 0.023021, bitrate: 68 kb/s
Run Code Online (Sandbox Code Playgroud)

所以结果是相当准确的。

速度

结果:yt-dlp 比 youtube-dl 快 20 倍

为了进行基准测试,我运行了下面另一个答案的示例:

time ffmpeg -ss 00:00:37 -to 00:00:44 -i "$(youtube-dl -f best --get-url 'https://youtu.be/PVGeM40dABA')" -c:v copy -c:a copy coffee_sliding.mp4
Run Code Online (Sandbox Code Playgroud)

在我的机器上这花了 36 秒。

然后我按照我建议的方式运行它,使用yt-dlp

time yt-dlp -f best --download-sections "*0:00:37-0:00:44" --force-keyframes-at-cuts https://youtu.be/PVGeM40dABA
Run Code Online (Sandbox Code Playgroud)

在我的机器上这花了 1.8 秒。

因此,通过这个简单的基准测试,速度快了 20 倍!

我想这个因素可能会因不同情况而改变,但这是一个有希望的信号。

准确性

结果:yt-dlp 比 youtube-dl 准确 76 倍

如果结果的准确性较差,则更快的方法不一定更好。

我将上面生成的提取剪辑与预期持续时间(37 秒-44 秒 = 7 秒持续时间)进行了比较。

下载的文件youtube-dl时长为 8.52 秒(缩短了 1.52 秒)。

ffprobe coffee_sliding.mp4 2>&1 | grep Duration
  Duration: 00:00:08.52, start: 0.000000, bitrate: 1702 kb/s
Run Code Online (Sandbox Code Playgroud)

下载的文件yt-dlp时长为 7.02 秒(缩短了 0.02 秒)。

ffprobe coffee_sliding_ytdlp.mp4 2>&1 | grep Duration
  Duration: 00:00:07.02, start: 0.000000, bitrate: 1563 kb/s
Run Code Online (Sandbox Code Playgroud)

再次强调,尽管有“仅一次测试”的所有注意事项,但准确率提高了 76 倍。yt-dlp 的不准确性几乎可以忽略不计。