我只想下载这段视频。的音频和视频流(警告:前面的母性侮辱),我总是被这样的错误所禁止:
[youtube] hcQlNng606I: Downloading webpage
[youtube] hcQlNng606I: Downloading video info webpage
[youtube] hcQlNng606I: Extracting video information
[youtube] hcQlNng606I: Downloading MPD manifest
[download] YO MAMA! Star Wars Jokes-hcQlNng606I.webm has already been downloaded
[download] 100% of 4.78MiB为什么会发生这种事?
因为在youtube-dl下载了Opus音频或VP9视频之后,它们都将被保存为*.webm。
我的第一个解决办法是将它们下载到其他目录上,而且(对我来说)效率不高。
那么,我如何强迫它将Opus音频写成*.opus而不是*.webm呢?
附加说明:为什么我喜欢在YouTube上下载VP9/Opus格式,然后在ffmpeg上合并呢?VP9/Opus优于H 264/AAC。
发布于 2017-06-15 08:15:08
如果您希望同时保留音频文件和视频文件,请使用-k作为参数之一。例如。:youtube-dl -k youtube.com/watch/somevideo如果要将音频文件保存为.opus,请使用youtube-dl --audio-format opus youtube.com/watch/somevideo
一些额外的注释:
如果你想拥有最好的音频,你可以使用youtube-dl --audio-quality 0 youtube.com/watch/somevid,如果你想有最好的音频质量和youtube-dl -x youtube.com/watch/somevid直接提取音频。如果你想要更多关于所有这些东西的信息,只要使用youtube-dl -h,它就会给你帮助信息,你读得越多,他们就不会那么困惑。
发布于 2020-03-25 22:15:17
无论下载文件的格式如何,--audio-format opus总是将其转换为opus。所以这通常不是你想要的。我编写了一个python脚本来解决这个问题。它是写的假设你只想要音频。它运行youtube-dl -if bestaudio <url>,如果下载的任何文件都是.webm,它就假设它是opus,并使用ffmpeg进行无损容器到.opus的转换。( -i用于下载整个播放列表。在播放列表中经常有一些由于任何原因而无法下载。)
#!/usr/bin/env python
# Youtube actually hosts audio-only opus tracks, but you can only get them
# in the webm container, which many music players, including quodlibet, don't
# know what to do with. This script downloads the track, then converts it with
# zero loss to the opus container using ffmpeg's `-acodec copy` feature.
from sys import *
from subprocess import call
from os.path import splitext
from os import remove, walk, listdir
from tempfile import TemporaryDirectory
from shutil import move
url = argv[1]
with TemporaryDirectory(prefix='yta-') as tempdir:
call(['env', '-C', tempdir, 'youtube-dl', '-if', 'bestaudio', url])
for tempdir, dirs, files in walk(tempdir):
for fn in files:
path = tempdir+'/'+fn
name, ext = splitext(path)
if ext == '.webm':
if call([
'ffmpeg', '-hide_banner',
'-i', path,
'-acodec', 'copy',
name+'.opus'
]) == 0:
remove(path)
for node in listdir(tempdir):
move(tempdir+'/'+node, '.')编辑:我现在明白了,我误解了你的问题。避免youtube-dl运行之间的文件名冲突的最佳方法是更改输出文件名模板。如果没有指定--output,则默认情况是%(title)s-%(id)s.%(ext)s。你应该做的是做--output %(title)s-%(id)s-audio.%(ext)s的音频采集和--output %(title)s-%(id)s-video.%(ext)s的视频采集。有关更多信息,请参见OUTPUT TEMPLATE in man youtube-dl。您甚至可以对%(title)等进行完全的核弹,只需使用--output audio.webm等就可以使脚本的ffmpeg阶段更容易找到源文件。
https://askubuntu.com/questions/925622
复制相似问题