2016-12-24 10 views
2

Я хотел бы загрузить первоначально отредактированный x секунд mp3 с видео URL-адреса youtube.
Я нашел, что youtube-dl может загрузить видео с youtube на локальную машину. Но когда я посмотрел на страницы man youtube-dl, я не смог найти никаких вариантов отделки.Bash: скрипт bash для загрузки обрезанного mp3 с youtube url

Поэтому я попытался использовать ffmpeg для обрезания загруженного mp3-файла.
Вместо этого это два шага, мне нравится писать один скрипт bash, который делает то же самое.
Моя попытка приведена ниже.

Однако, я застрял в одном месте:
«КАК ПОЛУЧИТЬ ПЕРЕМЕННОЕ ИМЯ ВЫХОДА ФАЙЛА MP3 ИЗ YOUTUBE-DL?»
Сценарий приводится ниже:

# trim initial x seconds of mp3 file 
# e.g. mytrim https://www.youtube.com/watch?v=dD5RgCf1hrI 30 
function mytrim() { 
    youtube-dl --extract-audio --embed-thumbnail --audio-format mp3 -o "%(title)s.%(ext)s" $1 
    ffmpeg -ss $2 -i $OUTPUT_MP3 -acodec copy -y temp.mp3 
    mv temp.mp3 $OUTPUT_MP3 
    } 

Как получить значение переменной $ OUTPUT_MP3?
echo "% (заголовок) s.% (Ext) s" дает дословный вывод, не дает выходного имени файла.

Как мы можем заставить скрипт работать?

Помощь будет оценена по достоинству.

+1

1. вы создаете выходной файл из youtube-dl, вы не можете передать это имя как значение '-i' в' ffmpeg'? 2. вы можете проанализировать вывод 'ffmpeg -i file 2> 1 | grep -i title', чтобы извлечь имя заголовка, встроенное в файл. Или посмотрите на вывод файла 'ffmpeg -i', чтобы узнать, есть ли другое значение ключа, которое дает нужные вам данные. Это может помочь, если вы добавите небольшой пример ожидаемых имен файлов и т. Д. К вашему Q. Удачи. – shellter

+0

Я пытаюсь указать вам направление, которое может помочь вам ответить на вашу проблему. Сначала нужно решить, если 'ffmpeg -i file 2> & 1 | grep -i title' производит что-нибудь полезное. Если это показывает точное значение, которое вы хотите использовать, то я думаю, вы имеете в виду 'OUTPUT_MP3 = $ (ffmpeg -i file 2> & 1 | grep -i title'. В противном случае вам нужно улучшить Q с помощью данных примера usefule. Удачи – shellter

+0

@shellter Я получаю только имя выходного файла после его создания из youtube-dl, например hello.mp3, но я не знаю в скрипте. –

ответ

4

youtube-dl поддерживает опцию --get-filename, которая на самом деле ничего не загружает, но дает вычисленное имя файла на стандартном выводе.

mytrim() { 
    local downloaded_file 
    youtube-dl --extract-audio --embed-thumbnail --audio-format mp3 -o "%(title)s.%(ext)s" $1 
    downloaded_file=$(youtube-dl --get-filename --extract-audio --embed-thumbnail --audio-format mp3 -o "%(title)s.%(ext)s" $1) 
    ffmpeg -ss $2 -i "${downloaded_file}" -acodec copy -y temp.mp3 
    mv temp.mp3 "${downloaded_file}" 
} 
+0

Спасибо, однако, когда я попробовал mytrim https://www.youtube.com/watch?v=dD5RgCf1hrI 30, я получил ошибку Bash Tutorial 1 - Hello World.webm: Нет такого файла или каталога. ЭТО НЕИСПРАВНОСТИ. –

+0

@BhishanPoudel: что произойдет, если вы выполните 'mytrim" youtube.com/watch ... "?? (С dbl-кавычками, окружающими ваше имя файла). Удачи. – shellter

+0

@BhishanPoudel это похоже на ошибку copy-n-paste (или вы используете устаревший скрипт 'youtube-dl' - у меня есть версия' 2016.12.01') –

1

спасибо @umlaute,
я добавил следующие функции в моей bash_profile:

# download best video quality using youtube-dl 
# usage: myvid https://youtu.be/450p7goxZqg?t=4 
function myvid() { 
    youtube-dl -f bestvideo+bestaudio "$1" 
    rm -r youtube_video_time.txt 
} 

# usage: mymp3 youtube_video_url 
mymp3() { 
    local downloaded_file 
    youtube-dl --extract-audio --embed-thumbnail --audio-format mp3 -o "%(title)s.%(ext)s" $1 
    downloaded_file=$(youtube-dl --get-filename --extract-audio --embed-thumbnail --audio-format mp3 -o "%(title)s.%(ext)s" $1) 
} 

# initial x seconds trimmed mp3 song 
# mytrim 5 https://www.youtube.com/watch?v=iLQxbEkN85o 
mytrim() { 
    local downloaded_file 
    youtube-dl --extract-audio --embed-thumbnail --audio-format mp3 -o "%(title)s.%(ext)s" $2 
    downloaded_file=$(youtube-dl --get-filename --extract-audio --embed-thumbnail --audio-format mp3 -o "%(title)s.%(ext)s" $2) 
    ffmpeg -ss $1 -i "${downloaded_file}" -acodec copy -y temp.mp3 
    mv temp.mp3 "${downloaded_file}" 
    clear 
    echo "${downloaded_file}" 
    # Now replace whitespace by underscore 
    find . -type f -name "* *.mp3" -exec bash -c 'mv "$0" "${0// /_}"' {} \; 
    # Lowercase the file name 
    for i in $(find . -name '*[A-Z]*.mp3' -type f); do mv "$i" "$(echo $i|tr A-Z a-z)"; done 
} 

Чтобы скачать песни из текстового файла

IN_URL="/Volumes/Media/Music/download_youtube_mp3/songs.txt" 
ODIR="downloaded_songs/%(title)s.%(ext)s" 
youtube-dl --extract-audio --embed-thumbnail --audio-format mp3 --audio-quality=320k --output $ODIR --batch-file=$IN_URL 

 Смежные вопросы

  • Нет связанных вопросов^_^