Как вынудить youtube-dl сохранить закодированное Опусом аудио как *.opus файлы

Я просто хочу загрузить оба аудио-и видеопотока этого видео. (ПРЕДУПРЕЖДЕНИЕ: Материнские Оскорбления вперед) я всегда запрещаемый ошибками как это:

[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.

2
задан 15 June 2017 в 10:16

2 ответа

Если Вы надеетесь сохранять и звуковой файл и-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, это даст Вам сообщение справки и чем больше Вы читаете, тем менее сбивающими с толку они становятся.

2
ответ дан 2 December 2019 в 03:39

- аудиоформат 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 вашего скрипта поиск источника файлы.

1
ответ дан 25 March 2020 в 22:15

Другие вопросы по тегам:

Похожие вопросы: