gpt4 book ai didi

Python - 如果 sys.argv 包含 "&"字符,则不会打开第二个子进程

转载 作者:行者123 更新时间:2023-12-04 23:03:50 25 4
gpt4 key购买 nike

我有一个 Python 脚本,它使用 youtube-dl 下载视频然后使用ffmpeg从中提取帧.这是代码:

def DownloadVideo():
output_file = "/Users/francesco/Desktop/SOURCE/%(title)s-%(id)s.%(ext)s"
check_call(["youtube-dl","--output", output_file, "--restrict-filenames", "-f", "best", sys.argv[1]])

def ConvertVideo(video):
DEST = "/Users/francesco/Desktop/OUTPUT"
SOURCE = "/Users/francesco/Desktop/SOURCE"
ffmpeg_path = "/Users/francesco/Desktop/ffmpeg/ffmpeg"
video_path = SOURCE + "/" + video
dest_path = DEST + "/" + os.path.splitext(video)[0] + "-%d.png"
check_call([ffmpeg_path, "-v", "0", "-i", video_path, "-f", "image2", dest_path])

def Main():
DownloadVideo()
for video in os.listdir("/Users/francesco/Desktop/SOURCE"):
ConvertVideo(video)

我运行命令 python myscript.py myvideolink下载过程一切正常,但 ConvertVideo 没有启动,它只是卡住了几秒钟,然后程序退出。

如果我尝试运行相同的命令跳过 DownloadVideo() (已经在文件夹中下载了视频)它也不起作用,但如果我使用 python myscript.py没有 argv[1],ffmpeg 进程有效!为什么会发生这种情况?

更新:我试图删除 -v 0 ffmpeg 中的选项以查看实际发生的情况,ffmpeg 进程启动,但像这样被卡住:
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
built with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
configuration: --prefix=/Volumes/Ramdisk/sw --enable-gpl --enable-pthreads --enable-version3 --enable-libspeex --enable-libvpx --disable-decoder=libvpx --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-avfilter --enable-libopencore_amrwb --enable-libopencore_amrnb --enable-filters --enable-libgsm --enable-libvidstab --enable-libx265 --disable-doc --arch=x86_64 --enable-runtime-cpudetect
libavutil 54. 20.100 / 54. 20.100
libavcodec 56. 26.100 / 56. 26.100
libavformat 56. 25.101 / 56. 25.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 11.102 / 5. 11.102
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100

更新 2:事实证明,这只发生在参数(它是一个链接)包含字符“&”时。任何人都知道为什么这对 ffmpeg 来说是个问题?他既没有使用 arg 变量...

最佳答案

我的猜测是您正在指定一个已经存在的输出位置,而 FFmpeg 询问您是否要覆盖文件,等待标准输入上的“y”(或其他任何内容,这意味着不)。为防止它这样做,请使用“-y”选项,它可以防止它询问该问题并强制覆盖输出文件。

关于Python - 如果 sys.argv 包含 "&"字符,则不会打开第二个子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com