yt-dlp结合ffmpeg处理视频报no such option:-l错误如何解决
问题产生原因
你当前的命令存在参数归属逻辑错误:
yt-dlp和ffmpeg是两个独立的命令行工具,你直接把ffmpeg的全部参数拼接在yt-dlp命令尾部,没有做逻辑分隔,shell会把所有参数都传给yt-dlp解析。- yt-dlp的
-o参数作用是指定下载文件的输出路径/命名规则,你在-o后没有传入合法的输出文件名,直接衔接了ffmpeg的参数内容,yt-dlp在逐段解析参数时,会把ffmpeg参数里-level 3的开头-l识别为自身的命令选项,而yt-dlp本身没有-l这个选项,因此直接抛出对应报错,根本不会执行到下载、转码的逻辑。
修复方案
有两种可落地的写法,按需选择即可:
方案1:分两步执行(最稳妥,参数不易写错)
先单独调用yt-dlp把目标视频下载到本地,再单独调用ffmpeg完成转码,两个命令先后执行:
- 下载视频到本地,命名为
in.mp4
yt-dlp "https://www.youtube.com/watch?v=PtkqwslbLY8" -o "in.mp4"
- 下载完成后执行ffmpeg转码,输出适配iPod Classic的视频文件
output.mp4
ffmpeg -i in.mp4 -vcodec libx264 -crf 23 -preset fast -profile:v baseline \ -level 3 -refs 6 -vf "scale=640:-1,pad=iw:480:0:(oh-ih)/2,format=yuv420p" \ -acodec copy output.mp4
方案2:单命令自动完成下载+转码
借助yt-dlp自带的ffmpeg后处理能力,在下载完成后自动调用ffmpeg按指定参数转码,只需执行一次命令:
yt-dlp "https://www.youtube.com/watch?v=PtkqwslbLY8" \ --postprocessor-args "ffmpeg:-vcodec libx264 -crf 23 -preset fast -profile:v baseline -level 3 -refs 6 -vf 'scale=640:-1,pad=iw:480:0:(oh-ih)/2,format=yuv420p' -acodec copy" \ -o "output.mp4"
内容的提问来源于stack exchange,提问作者garson
相关产品推荐
相关产品推荐

