bin*_*rom 7 ffmpeg opencv youtube-dl
让我解释一下我的设置。我一直在使用 pytube(Python 模块)从 YouTube 下载视频。然后我会从视频中提取一些随机帧并将它们保存为 jpeg。我不需要音频,也不需要视频。
现在,我已经下载了数以万计的视频,然后删除它们只是为了每个视频随机抓取几个帧。这似乎很浪费,而且成本也很高。有没有办法只下载帧本身而不必下载视频?
我猜想像 youtube-dl 结合 ffmpeg 这样的东西可以解决问题,但我无法在网上找到一个例子来做到这一点。有一种下载随机视频样本的解决方案,可以大大减少网络带宽消耗,但我想要更高效、更省时的东西。任何帮助,将不胜感激。
WARNING: Could not send HEAD request to https://www.youtube.com/watch\?v\=oHg5SJYRHA0: HTTP Error 404: Not Found ERROR: Unable to download webpage: HTTP Error 404: Not Found (caused by HTTPError()); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see https://yt-dl.org/update on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output. ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 7 (Ubuntu 7.3.0-16ubuntu3) configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared WARNING: library configuration mismatch avcodec configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libavresample 3. 7. 0 / 3. 7. 0 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100 -vframes: No such file or directory
Run Code Online (Sandbox Code Playgroud)
ffmpeg -ss "$screenshot_time" -i $(youtube-dl -f 22 --get-url "$youtube_url") -vframes 1 -q:v 2 "$output_file"
Run Code Online (Sandbox Code Playgroud)
ffmpeg的-ss选项在这里用作输入选项,这是可用的最快方法。它可以用作输出选项,这将花费更多时间,但可以避免输入版本偶尔生成的意外工件创建。-ss 位置(输入/输出)
当用作输入选项时(在 -i 之前),在此输入文件中查找位置。请注意,在大多数格式中不可能精确查找,因此 ffmpeg 将查找位置之前最近的查找点。当转码和 -accurate_seek 启用(默认)时,搜索点和位置之间的额外段将被解码并丢弃。当进行流复制或使用-noaccurate_seek时,它将被保留。
当用作输出选项(在输出文件名之前)时,解码但丢弃输入,直到时间戳到达位置。
位置可以以秒为单位或以 hh:mm:ss[.xxx] 形式。
-i选项表示使用以下内容作为 的输入ffmpeg,这里我们使用 Bash 的命令替换来使用 的输出
youtube-dl。-vframes 1将输出帧数设置为 1。-q:v 2控制输出质量。整个范围是 1-31 的线性范围,其中值越低,质量越高。ffmpeg2-5 是用于本答案部分的源答案中建议的范围。"$screenshot_time"应替换为您希望在上面显示的片段中捕获的时间戳。"$output_file"应替换为输出文件的路径、screenshot.jpeg 或类似文件。就youtube-dl命令而言,-f 22下载为最佳质量的 mp4 格式,并且"$youtube_url"应该替换为视频的 URL。
管道工工具提供了抓取 YouTube 视频中单个帧的屏幕截图的功能。要安装该工具,请在终端窗口中键入以下内容:
sudo snap install plumber
Run Code Online (Sandbox Code Playgroud)
将 YouTube 网址粘贴到黄色标记的框中,或通过单击红色标记的图标使用内置搜索功能。
然后,您可以在视频中找到所需的帧,然后单击粉红色标记的图标,然后单击绿色标记的图标,这将打开另一个窗口以显示屏幕截图的预览,并允许您将其另存为图像文件。
该工具还可用于保存 YouTube 视频剪辑的视频/GIF。
| 归档时间: |
|
| 查看次数: |
5369 次 |
| 最近记录: |