Я просто хочу загрузить оба аудио-и видеопотока этого видео. (ПРЕДУПРЕЖДЕНИЕ: Материнские Оскорбления вперед) я всегда запрещаемый ошибками как это:
[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 загрузил или аудио Опуса или видео VP9, оно будет оба сохранено как *.webm.
Мое первое обходное решение для этого должно загрузить их на другом каталоге, и это не (для меня) очень эффективно.
Таким образом, как я вынуждаю это записать аудио Опуса как *.opus вместо *.webm
Дополнительные примечания: Почему мне нравится загружать форматы VP9/Opus на YouTube и комбинировать его позже ffmpeg? VP9/Opus лучше, чем H264/AAC.
Если Вы надеетесь сохранять и звуковой файл и-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
, это даст Вам сообщение справки и чем больше Вы читаете, тем менее сбивающими с толку они становятся.
- аудиоформат opus
всегда конвертируется в opus, независимо от формата загруженного файла. Так что обычно это не то, что вам нужно. Я написал скрипт на Python для решения этой проблемы. Он был написан исходя из предположения, что вам нужен только звук. Он запускает youtube-dl -if bestaudio
, затем, если какой-либо из загруженных файлов имеет формат .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
. Что вам нужно сделать, это сделать - вывести% (title) s -% (id) s-audio.% (Ext) s
для получения звука и - вывести% (title) s -% (id) s-video.% (ext) s
для получения видео. См. OUTPUT TEMPLATE
в man youtube-dl
для получения дополнительной информации. Вы даже можете полностью уничтожить % (title)
и т. Д. И просто сказать - output audio.webm
и т. Д., Чтобы упростить этапу ffmpeg вашего скрипта поиск источника файлы.