Como baixar o melhor vídeo junto com o melhor áudio compatível com o youtube-dl?

19

Eu quero usar um seletor de formato que seja algo como, -f bestvideo+best audio whose extension is compatible with the video extensionpara que eles não precisem ser agrupados em um mkv ( WARNING: Requested formats are incompatible for merge and will be merged into mkv.).

Nota: eu conheço -f beste não quero isso. Desejo as melhores qualidades possíveis de áudio e vídeo, garantindo a compatibilidade. Como fazer isso?

O codificador pacífico
fonte
1
Talvez esta pergunta e resposta sejam úteis: askubuntu.com/q/806258/57576
andrew.46
@ andrew.46 Obrigado por tentar ajudar, mas o link não foi de muita ajuda. Ele descreve o cenário quando você está segmentando um conjunto de extensões específico. Enquanto no meu caso, sou flexível com minhas extensões - só quero que elas sejam compatíveis. Por exemplo, um webmvídeo e um opusarquivo de áudio, que resultam em um .webmarquivo, são perfeitamente aceitáveis ​​para mim.
The Peaceful Coder

Respostas:

32

Você pode baixar o melhor vídeo e áudio usando:

youtube-dl -f bestvideo+bestaudio "link to youtube video"

Se isso lhe der um erro, tente o seguinte:

youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio' --merge-output-format mp4 "link to youtube video"

Aqui você baixa o melhor vídeo e áudio separadamente e, em seguida, funde-o em um arquivo mp4, neste caso. Você também pode alterar o formato de saída no vídeo mesclado.

Boa sorte!

Herman Karlsson
fonte
Obrigado! Mas eu já sei disso. Como expliquei no meu comentário , não quero limitar meu formato de seleção a um formato específico. Portanto, o uso -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio'pode não baixar o melhor vídeo, se for da webmextensão. De qualquer forma, +1 por tentar ajudar.
The Peaceful Coder
6

pergunta antiga, mas a primeira resposta no google, então:

com a definição da seguinte função, funcionou para mim (também é possível colocá-la ~/.bashrc):

youtube-dl_video_and_audio_best_no_mkv_merge () {
  video_type=$(youtube-dl -F "$@" | grep "video only" | awk '{print $2}' | tail -n 1)
  case $video_type in
    mp4)
      youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]' "$@";;
    webm)
      youtube-dl -f 'bestvideo[ext=webm]+bestaudio[ext=webm]' "$@";;
    *)
      echo "new best videoformat detected, please check it out! -> aborted";;
  esac
}

agora você pode baixar com

youtube-dl_video_and_audio_best_no_mkv_merge "https://www.youtube.com/watch?v=*******" "https://https://www.youtube.com/watch?v=********"

fonte: criação própria

ninguém
fonte
2
Observe que o nome da função não é tecnicamente válido, especificamente os traços e o sinal de adição. Portanto, você pode ter problemas ao usar a função, especialmente exportando-a. Eu recomendaria transformá-lo em um script (já que não precisa ser uma função) e alterar o nome para algo como youtube-dl_video_and_audio_best_no_mkv_merge.
Wjandrea 17/17/17
@wjandrea: Traços nos nomes das funções do shell são válidos (como são para comandos em geral). Eu não sei sobre funções exportadas embora.
David Foerster
@DavidFoerster Sim, o Bash aceita nomes de funções inválidos, mas não pode exportá-los. Se você tentar, você receberá um erro #not a valid identifier
wjandrea 17/17/17