批处理脚本以使用youtube-dl下载视频并使用FFmpeg进行转换

时间:2019-03-26 20:31:06

标签: batch-file cmd ffmpeg youtube-dl

我正在尝试

  1. 使用单个batch脚本
  2. 使用youtube-dl下载mp4视频
  3. 将视频的原始标题保存到批处理变量
  4. 使用FFmpeg将视频转换为webm

我想保留原始标题,因此它需要使用youtube-dl读取标题,将其保存到变量中,并将该变量用于FFmpeg输入/输出文件名。


CMD批处理

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。使用循环下载视频

这用于将标题保存到变量%%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。最终脚本
下载视频,保存标题,使用FFmpeg进行转换

排序

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"
    )

内联

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无法下载文件。它说该文件已经下载,即使目录中没有文件。

  

[下载] @ C#\ Users \ Matt \ Downloads \ Color Balloons.mp4已经   已下载

1 个答案:

答案 0 :(得分:0)

我能够创建一个有效的脚本。

问题之一是youtube-dl如果位于C:\Program Files\中不能正常工作,但是当它位于不需要管理员特权的地方时可以工作。

--get-filename部分在@路径之前需要一个youtube-dl符号。


  1. youtube-dl从视频获取文件名并保存到var %%f
  2. youtube-dl将视频下载到C:\Path\To\Downloads\
  3. 将输出合并为mp4,因此您可以为FFmpeg输入指定扩展名
  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"
   )