Não acredito que youtube-dl
sozinho faça o que você quiser. No entanto, você pode combiná-lo com um utilitário de linha de comando como o ffmpeg.
Primeiro adquira o URL real usando o youtube-dl:
youtube-dl -g "https://www.youtube.com/watch?v=V_f2QkBdbRI"
Copie a saída do comando e cole-a como parte do -i
parâmetro do próximo comando:
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:00:15.00 -t 00:00:10.00 -c copy out.mp4
O -ss
parâmetro nesta posição indica para descartar todas as entradas até 15 segundos no vídeo. A -t
opção declara capturar por 10 segundos. O restante do comando diz para armazenar como um mp4.
O ffmpeg é uma ferramenta popular e deve estar em qualquer um dos gerenciadores populares de repositórios / pacotes de SO.
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
ffmpeg
fará o download apenas da parte que você especificar.fonte
-map 0:v -map 1:a -c:v libx264 -c:a aac
que podem melhorar a qualidade. Também gosto de acrescentaryoutube-dl -f bestvideo+bestaudio
que estou recebendo a versão da mais alta qualidade.Adicionando à resposta de Johnnie:
Use
youtube-dl -g "URL"
para obter os fluxos de vídeo e áudio.Agora usa:
Você precisará usar a
-ss
opção para cada fluxo. Também recomendo fazê-lo cerca de 30 segundos antes e depois usar outro-ss 30
para evitar a perda de quadros-chave. Aqui está um exemplo real usando um dos meus vídeos do youtube.Vídeo
Resultado:
Eu queria cortar das 43:00 para as 50:10, então vou fazer
-ss 42:30
(dando-me alguns segundos para capturar um bom quadro-chave) em ambas as entradas e depois-ss 30
executar as entradas depois das 43:00.Depois, usarei
map
para mapear o vídeo0:v
e o áudio1:a
(0 significa a primeira entrada, que é o vídeo, e 1 significa a segunda entrada, que é o áudio) e depois escolho minhas opções de codificação.fonte
-i
bandeira do ffmpeg poderia receber URLs. puro--postprocessor-args
diretamente no youtube-dl?Esta solicitação de recurso ainda não foi implementada no youtube-dl. Veja a edição # 622 e muitas duplicatas no github.
fonte
youtube-dl
suporta a passagem de argumentos para o pós-processador subjacente (testado com a versão 2017.08.27.1):youtube-dl -x --postprocessor-args "-ss 00:13:00.00 -t 00:04:00.00" https://youtu.be/...
Isso é basicamente o mesmo que fazer o pós-processamento consigo
ffmpeg
mesmo depois de baixar o arquivo primeiro.fonte
unable to obtain file audio codec with ffprobe
erro. Você pode me ajudar com isso? Estou usando o CentOS 7-x
sinalizador baixa apenas o áudio. Omita-o do comando se desejar áudio e vídeo. :)Você pode fazer o download desde o início até um ponto sem fazer o download e editar tudo. Isso é metade do que essa pergunta faz:
mp4
-F
para ver os formatos disponíveis e escolha ummp4
que possua ambos. por exemplo,-f18
ou-f22
geralmente estão lá.Sim. É um truque .
Pergunta adicional: se você deseja os formatos de vídeo e áudio separados, pode baixar parte de cada um separadamente (usando
^c
como aqui) e depois mesclá-los manualmente? Eu não acho que funcione para alguns formatos.fonte
Isso não responde completamente à pergunta do OP, mas há uma maneira de baixar um fluxo do início para uma duração específica sem precisar fazer o download do fluxo completo. Como o YouTube fornece suporte para currículo, poderíamos solicitar conteúdo parcial usando o
Range
cabeçalho.Primeiro buscamos os URLs do fluxo:
Isso deve gerar dois URLs (cada um para fluxos de vídeo e áudio).
Agora, envie uma solicitação de cabeçalho ao primeiro URL (que possui um link para o fluxo de vídeo) para buscar a duração total do conteúdo desse fluxo:
Agora, dividimos essa duração total do conteúdo pelo total de segundos no vídeo (o vídeo do YouTube tem uma duração de 4 minutos e 7 segundos, ou seja, 247 segundos.) Para obter aproximadamente a duração do conteúdo de 1 segundo:
64380504 / 247 ≈ 260650
Multiplicamos esse valor por (número de segundos que queremos buscar desde o início + 1)
(adicionamos um para também contabilizar aproximadamente o espaço extra ocupado pelos metadados, que é colocado no início do fluxo)
Por exemplo, para buscar aproximadamente os primeiros 10 segundos, você precisará buscar os primeiros
260650 * 11 = 2867150
bytes; portanto, fazemos uma solicitação com oRange
cabeçalho:Isso deve baixar apenas os primeiros 10 segundos. O arquivo baixado deve poder ser reproduzido, mas é melhor deixar o FFmpeg corrigir os metadados incorretos:
Também podemos baixar apenas a parte inicial do áudio (2º URL) de maneira semelhante (a duração do conteúdo seria diferente, mas o total de segundos permanecerá o mesmo).
O download de qualquer parte do meio do vídeo também deve ser possível dessa maneira, mas provavelmente será muito mais complicado, porque o YouTube coloca os metadados no início do fluxo (nos primeiros bytes) e sem que ele esteja presente na mídia baixada, o o stream não será reproduzido.
EDIT: isso funcionará apenas em sites com suporte para currículo, diz o YouTube. Não funcionará para outros sites.
fonte
Use o parâmetro --postprocessor-args para passar a saída de áudio / vídeo para o ffmpeg a ser editado (o processador), portanto, é necessário instalar o ffmpeg.
--postprocessor-args recebe 3 argumentos e valores (por exemplo, há mais, consulte a página de manual do ffmpeg):
Exemplos:
PS: o youtube-dl fará o download de toda a mídia antes de processá-la e depois a removerá.
fonte