When you run without shell=True then you don't need " " in element '"ffmpeg_i:-ss 00:00:10.00 -to 00:00:40.00"' because normally only shell need it to recognize which element keep as one string - but later shell sends this string to system without " "
import subprocess
result = subprocess.call([
'yt-dlp',
'-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'
'--downloader', 'ffmpeg'
'--downloader-args', 'ffmpeg_i:-ss 00:19:10.00 -to 00:19:40.00'
'--no-check-certificate',
'https://youtu.be/YXfnjrbmKiQ'
])
print(result)
OR you could run it with shell=True and then you need single string and you have to use " "
import subprocess
result = subprocess.call(
'yt-dlp -f bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best --downloader ffmpeg --downloader-args "ffmpeg_i:-ss 00:19:10.00 -to 00:19:40.00" --no-check-certificate https://youtu.be/YXfnjrbmKiQ',
shell=True
)
print(result)
BTW:
There is standard module shlex which can convert string with command to list of arguments.
import shlex
cmd = 'yt-dlp -f bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best --downloader ffmpeg --downloader-args "ffmpeg_i:-ss 00:19:10.00 -to 00:19:40.00" --no-check-certificate https://youtu.be/YXfnjrbmKiQ'
cmd = shlex.split(cmd)
print(cmd)
Result shows this element without " ":
['yt-dlp',
'-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
'--downloader', 'ffmpeg',
'--downloader-args', 'ffmpeg_i:-ss 00:19:10.00 -to 00:19:40.00',
'--no-check-certificate', 'https://youtu.be/YXfnjrbmKiQ']