Оригинал"> Захват музыки с YouTube. Сделать это своим способом · ansmirnov

ansmirnov

Захват музыки с YouTube. Сделать это своим способом

Теги: Перевод, Bash, ffmpeg, GNU/Linux, RegExp

Перевод статьи Grabbing Your Music from YouTube: Do It Your Way Оригинал

Несколько месяцев назад мой тесть сказал, что его компания обновила свои компьютеры. Когда я услышал, что несколько подержанных ПК вскоре будут доступны, я решил взять некоторые из них и собрать из них свою домашнюю сеть и проводить эксперименты с GNU/Linux. Когда мой тесть спросил, можно было бы переформатировать один из этих компьютеров, чтобы он мог использовать его у себя дома, я ухватился за возможность привлечь еще одного пользователя в мир GNU/Linux. Прошло несколько дней, и он был счастливым пользователем своего нового компьютера под управлением Ubuntu, и наслаждался Firefox во время исследования Интернета. Я не знаю, что думают другие люди или говорят исследования удобств, но он сказал, что у него не было проблем с использованием системы, и он был удивлен, что я не установил антивирус.

После нескольких недель он сказал, что нашел замечательную систему YouTube, и, как энергичный слушатель джаза, стал исследовать классические произведения 1950-х и 60-х годов. Он поинтересовался, возможно ли захватить музыку из этих видео и записать их на компакт-диск, чтобы слушать их в автомобиле. Сначала я подумал, что, возможно, существуют какие-либо дополнения к Firefox для этого, но мне было лень их искать. Вместо этого, я решил посмотреть, смогу ли я взломать его через мою любимую среду разработки, Bash, и придумать что-нибудь, что может справиться с задачей.

В первую очередь надо было решить, какие компоненты мне были нужны для того, чтобы объединить их с помощью универсального клея Bash:

Учитывая, что одним из ключевых аспектов UNIX и GNU/Linux утилит является: "делать одно, и делать это очень хорошо", я взял следующие утилиты, которые делали одно, и делали это очень хорошо:

youtube-dl : хороший Python-скрипт, который может скачивать видео с YouTube и других сайтов

ffmpeg: мощная утилита для обработки и конвертации любого видео или звукового файла

lame: идеальный выбор для кодирования звуковых данных в MP3

Первый компонент, youtube-dl -- это очень простая в использовании консольная утилита для загрузки видео файлов с YouTube. Например, чтобы загрузить "Мой путь" Фрэнка Синатры из http://www.youtube.com/watch?v=6E2hYDIFDIU все, что вам нужно сделать, это выполнить команду:

$ youtube-dl http://www.youtube.com/watch?v=6E2hYDIFDIU

чтобы сохраннить видеофайл. В данном случае вы увидите файл 6E2hYDIFDIU.flv в каталоге, из которого вы запускали youtube-dl. Вы также можете получить название видео автоматически с помощью youtube-dl:

$ youtube-dl --get-title http://www.youtube.com/watch?v=6E2hYDIFDIU
Frank Sinatra, My Way, With Lyrics

Как только вы получите видео файл, вторым шагом будет извлечение из него аудиоданных, что может быть легко достигнуто простой командой ffmpeg:

$ ffmpeg -i 6E2hYDIFDIU.flv 6E2hYDIFDIU.wav

Это немедленно извлечет аудио информацию из уже загруженного видео в WAV файл. И как только вы получите аудио данные в этом файле, их можно будет преобразовать в MP3 файл с помощью lame кодировщика. Как и предыдущие утилиты, использовать lame очень просто:

$ lame 6E2hYDIFDIU.wav 6E2hYDIFDIU.mp3

Вуаля! У вас есть MP3-файл, готовый для прослушивания. Вы можете удалить большие .wav файлы и записать .mp3 файлы на компакт-диск, чтобы слушать его в машине.

Как только у нас есть все компоненты готовы и испытаны, можно создать очень простой Bash скрипт, который будет принимать на вход веб-адрес видео на YouTube и производить MP3 файл в качестве результата:

#!/bin/bash

# A very simple Bash script to download a YouTube video
# and extract the music file from it.

address=$1
regex='v=(.*)'
if [[ $address =~ $regex ]]; then
    video_id=${BASH_REMATCH[1]}
    video_id=$(echo $video_id | cut -d'&' -f1)
    video_title="$(youtube-dl --get-title $address)"
    youtube-dl $address
    ext="flv"
    ffmpeg -i $video_id.$ext "$video_title".wav
    lame "$video_title".wav "$video_title".mp3
    rm $video_id.$ext "$video_title".wav
else
    echo "Sorry but the system encountered a problem."
fi

Если вы сохраните этот скрипт как youtube2mp3.sh и сделаете его исполняемым, набрав

chmod +х youtube2mp3.sh

вы сможете запустить его для загрузки "My Way" с помощью следующей команды:

./youtube2mp3.sh http://www.youtube.com/watch?v=6E2hYDIFDIU

В четвертой строке скрипта мы получаем адрес видео из командной строки, который передается в качестве первого параметра. Строки 5, 6, 7 и 8 используют регулярные выражения Bash и утилиту cut. Нас интересует только та часть адреса, которая начинается с 'v =', и не нужны параметры, которые могут следовать после, такие как 'feature=related'. После их обработки мы получаем уникальный код, который YouTube использует для идентификации видео и сохраняем его в переменной video_id. В строке 9, мы получаем название видеофайла с помощью youtube-dl и сохраняем его в переменной video_title. Для простоты я предположил, что расширение видеофайла будет '.flv' и сохранил его в переменной ext. Строки 12 и 13 извлекают звук и сохраняют его в MP3-файл и, наконец, в строке 14 мы делаем уборку, удаляем видео файл, а также .wav файл, которые больше не требуются. Если скрипт обнаружит ошибку в формате адреса видео, то будет выведено очень простое сообщение об ошибке (строка 16).

Этот скрипт очень прост и далек от совершенства Его целью было быть как можно более простым, не принимая во внимание множество важных вещей, таких как реалистичная обработка ошибок, различные видеоформаты и простая система предоставления помощи по использованию в случае, если параметры были введены неправильно или отсутствуют. Чуть более сложный Bash скрипт, который также использует простой графический интерфейс с помощью прекрасной утилиты xenity доступен на https://github.com/emres/youtube2mp3 (не стесняйтесь взламывать код и отправлять запросы Автору ;-) Как обычно я получил много удовольствия, изучая эти утилиты и объединяя их для создания решения, которое может быть полезным и для других людей. Конечно, это было бы практически невозможно без гибкости GNU/Linux и мира свободно распространяемого программного обеспечения, в котором мы живем. Я надеюсь, что теперь вы тоже будете наслаждаться музыкой во время вождения машины, как это делает мой тесть.

Удачного взлома.


Эмре Севиндж в настоящее время работает исследователем, разработчиком программного обеспечения и системным администратором в Linguapolis Institute of University of Antwerp, Бельгия. Он связан с GNU/Linux с 1994 года, когда он впервые познакомился с ним в математическом отделе Стамбула.