Пакетный скрипт для загрузки видео с youtube-dl и конвертации с FFmpeg - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь

  1. Использование одного batch сценария для
  2. Загрузка видео mp4 с использованием youtube-dl
  3. Сохранение исходного заголовка видео в пакетной переменной
  4. Преобразование видео в webm с помощью FFmpeg

Я хочу сохранить исходный заголовок,поэтому он должен прочитать заголовок с помощью youtube-dl, сохранить его в переменной и использовать эту переменную для FFmpeg имени файла ввода / вывода.


CMD Batch

1.Скачать видео

youtube-dl -f best "https://www.youtube.com/watch?v=TWNhqCHw0qc" -o "C:\Users\Matt\Downloads\%%(title)s.mp4" --merge-output-format mp4

2.Загрузка видео с использованием Loop

Используется для сохранения заголовка в переменной %%a.

for /f "delims=" %%a in ('youtube-dl -f best "https://www.youtube.com/watch?v=TWNhqCHw0qc" -o @"C:\Users\Matt\Downloads\%%(title)s.mp4" --merge-output-format mp4') do (echo example)

3.Final Script
Скачать видео, сохранить заголовок, конвертировать с FFmpeg

Sorted

for /f "delims=" %%a in ('
    youtube-dl 
    -f best "https://www.youtube.com/watch?v=TWNhqCHw0qc" 
    -o @"C:\Users\Matt\Downloads\%%(title)s.mp4" 
    --merge-output-format mp4
    ')

do (ffmpeg -y 
    -i "C:\Users\Matt\Downloads\%%a.mp4" 
    -c:v libvpx -b:v 1300K -crf 16 -pix_fmt yuv420p 
    -map 0:v:0? -sn 
    -c:a libvorbis -q:a 6 -ac 2 -map 0:a:0? 
    -f webm
    "C:\Users\Matt\Downloads\%%a.webm"
    )

Inline

for /f "delims=" %%a in ('youtube-dl -f best "https://www.youtube.com/watch?v=TWNhqCHw0qc" -o @"C:\Users\Matt\Downloads\%%(title)s.mp4" --merge-output-format mp4') do (ffmpeg -y -i "C:\Users\Matt\Downloads\%%a.mp4" -c:v libvpx -b:v 1300K -crf 16 -pix_fmt yuv420p -map 0:v:0? -sn -c:a libvorbis -q:a 6 -ac 2 -map 0:a:0? -f webm "C:\Users\Matt\Downloads\%%a.webm")

Ошибка

Прежде чем сценарий сможет достичь FFmpeg, youtube-dl не сможет загрузить файл.В нем говорится, что файл уже загружен, даже если в каталоге нет файла.

[download] @ C # \ Users \ Matt \ Downloads \ Color Balloons.mp4 уже загружен

1 Ответ

0 голосов
/ 28 марта 2019

Мне удалось создать работающий скрипт.

Одна из проблем заключалась в том, что youtube-dl не работал должным образом, если находится в C:\Program Files\, но работает, когда он находится где-то, что не требуетПрава администратора.

Для части --get-filename требуется символ @, прежде чем путь youtube-dl.


  1. youtube-dl получает имя файла из видео и сохраняет в var%%f
  2. youtube-dl загружает видео в C:\Path\To\Downloads\
  3. Объединить вывод как mp4, поэтому вы можете указать расширение для FFmpeg input
  4. FFmpeg преобразует видео в webm и использует %%f в качестве имени файла ввода / вывода.

for /f "delims=" %%f in ('
    @"C:\Users\Matt\Desktop\youtube-dl.exe" 
    --get-filename -o "%%(title)s" 
    "https://www.youtube.com/watch?v=TWNhqCHw0qc"
    ') 

do ("C:\Users\Matt\Desktop\youtube-dl.exe" 
    -f best "https://www.youtube.com/watch?v=TWNhqCHw0qc" 
    -o "C:\Users\Matt\Downloads\%%f.mp4" 
    --merge-output-format mp4 

    && 

    ffmpeg -y 

    -i "C:\Users\Matt\Downloads\%%f.mp4" 
    -c:v libvpx 
    -b:v 1300K -crf 16 
    -pix_fmt yuv420p 
    -map 0:v:0? 
    -sn 
    -c:a libvorbis 
    -q:a 6
    -map 0:a:0? 
    -f webm 
    "C:\Users\Matt\Downloads\%%f.webm"
   )
...