我正在尝试创建一个视频测验,其中包含其他视频的一小部分,连接在一起(目的是,人们会识别这些短片的拍摄地点)。
为此,我创建了一个文件,其中包含视频的URL," snip"的开始时间及其长度。例如:
https://www.youtube.com/watch?v=5-j6LLkpQYY 00:00 01:00
https://www.youtube.com/watch?v=b-DqO_D1g1g 14:44 01:20
https://www.youtube.com/watch?v=DPAgWKseVhg 12:53 01:00
意思是第一部分应该从第一个URL开始和最后一分钟拍摄视频,第二部分应该从第二个URL开始,从14:44(分钟:秒)开始,最后一分钟, 20秒等等。
然后,所有这些部分应该连接成一个视频。
我正在尝试编写一个脚本(我使用ubuntu并且能够流利使用几种脚本语言),并尝试使用youtube-dl命令行包和ffmpeg,但我找不到正确的选择,以实现我的需要。
任何建议都将受到赞赏。
答案 0 :(得分:1)
考虑视频列表在foo.txt
中,而输出视频为foo.mp4
,此 bash 脚本应能完成此任务:
eval $(cat foo.txt | while read u s d; do echo "cat <(youtube-dl -q -o - $u | ffmpeg -v error -hide_banner -i - -ss 00:$s -t 00:$d -c copy -f mpegts -);"; done | tee /dev/tty) | ffmpeg -i - -c copy foo.mp4
这是对process substitution和eval
使用一些技巧来避免中间文件,容器mpegts
可以使简单的concat protocol和tee /dev/tty
用于调试
我已经用youtube-dl 2018.09.26-1
和ffmpeg 1:4.0.2-3
进行了测试。