将FFMPEG中的Youtube-dl包括在Bash(OSX)中不起作用

时间:2019-07-13 20:54:52

标签: bash macos ffmpeg youtube-dl

我正在尝试下载5秒示例以获取youtube视频列表。传统方法是使用“ youtube-dl”下载整个文件,然后使用“ ffmpeg”将其分割为任意文件。

我正在尝试使用以下方法:https://github.com/ytdl-org/youtube-dl/issues/622#issuecomment-162337869

当我在命令中包含变量时,它确实起作用,例如:

ffmpeg -ss 0 -i $(youtube-dl -f best --get-url https://www.youtube.com/watch?v=ySVi-0RS5vI&t=5s) -t 10 -c:v copy -c:a copy title2.mp4

但是,我在尝试使系统自动化时遇到问题。具体来说,我希望ffmpeg和youtube-dl读取文件并使用这些值。我创建了文件“ youtube.txt”,其中包含以下代码:

440.8,https://www.youtube.com/watch?v=0-4wOE_DNeA,661.2,881.6,0-4wOE_DNeA
330,https://www.youtube.com/watch?v=0-AMWW6tHzw,495,660,0-AMWW6tHzw
509.2,https://www.youtube.com/watch?v=0-Rmto2rgMw,763.8,1018.4,0-Rmto2rgMw
427.6,https://www.youtube.com/watch?v=0-U53qm45cA,641.4,855.2,0-U53qm45cA
320.4,https://www.youtube.com/watch?v=0-dja9Ys4Sg,480.6,640.8,0-dja9Ys4Sg
343.6,https://www.youtube.com/watch?v=0-g_PulsqtM,515.4,687.2,0-g_PulsqtM
415.6,https://www.youtube.com/watch?v=0-nniRyn7dU,623.4,831.2,0-nniRyn7dU
431.2,https://www.youtube.com/watch?v=006BQU3BFxw,646.8,862.4,006BQU3BFxw

我正在使用以下命令:

parallel -j 6 --colsep ',' ffmpeg -ss {1} -i $(youtube-dl -f best --get-url {2}) --t 5 -c:v copy -c:a copy {5} :::: youtube.txt

但是,出现以下错误:

ERROR: '{2}' is not a valid URL. Set --default-search "ytsearch" (or run  youtube-dl "ytsearch:{2}" ) to search YouTube
--t: No such file or directory

您介意帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个使用python2的解决方案,因此这应该适用于MacOS随附的python版本。我的原始bash脚本由于某种原因在csv行读取中令人窒息。将此脚本添加到getvids.py所在的目录中的youtube.txt上,然后运行chmod +x getvids.py,并准备将其放开时./getvids.py

#!/usr/bin/python

import csv, os

with open('youtube.txt') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for row in csv_reader:
            starttimes = [row[0], row[2], row[3]]
            yturl = os.popen('youtube-dl -f best --get-url '+row[1]).read().strip()
            for thistime in starttimes:
                    print(row[1] + ' @time='+thistime)
                    os.system('ffmpeg -hide_banner -loglevel panic -ss '
                        +thistime+' -i "'+yturl+'" -t 5 -c copy '+row[4]+'['+thistime+'s].mp4')