我希望能够只下载视频的一部分。例如,能够指定下载的开始和/或结束时间。因此,当用户输入视频的开始和结束时间时,它应该只下载时间戳内的剪辑部分。这可能吗?
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 个部分是:
我已经在 YouTube 上进行了广泛的测试,并且在我自己的系统上一切正常......
参考:
小智 10
使用该--postprocessor-args参数传递ffmpeg要编辑的音频/视频输出(处理器)。显然,ffmpeg需要安装。
--postprocessor-args接受 3 个参数和值(这只是一个例子,查看ffmpegwith 的手册页man ffmpeg了解更多):
-ss HH:MM:SS : 开始时间-to HH:MM:SS : 时间结束-t HH:MM:SS : 需要的时间长度例子:
在 15 秒开始编码并在 1 分 20 秒停止:
$ youtube-dl --postprocessor-args "-ss 0:0:15 -to 0:1:20" '[video_URL]'
Run Code Online (Sandbox Code Playgroud)在 15 秒开始编码,只需要接下来的 3 分 5 秒:
$ youtube-dl --postprocessor-args "-ss 0:0:15 -t 0:3:5" '[video_URL]'
Run Code Online (Sandbox Code Playgroud)PS: youtube-dl将在处理之前下载整个媒体,然后将其删除。
管道工工具可以让您轻松完成此操作。安装应用程序:
snap install plumber
Run Code Online (Sandbox Code Playgroud)
安装后,它将出现在您的应用程序菜单中。
运行应用程序时,将所需的 YouTube 链接粘贴到框中(在下面的屏幕截图中以红色突出显示),或通过单击 YouTube 图标(以黄色突出显示)来使用内置的 YouTube 搜索功能。
这里没有分享的一个不错的替代方案是yt-dlp,youtube-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 的不准确性几乎可以忽略不计。