Python 子进程或 os.system 无法与 ffmpeg 一起使用

问题描述 投票:0回答:1

从昨晚开始我就一直在尝试让这个该死的程序运行起来,但似乎什么也做不了。我想先修剪视频,然后调整视频大小。我正在从一个文本文件中读取哪个视频以及给出最终名称的内容,超过 780 行长,相当多的视频。

到目前为止,我尝试过的每一个想法,子进程和os.system,除了错误语句之外我什么也得不到,或者现在我得到的只是没有任何类型的文件创建。我到底怎样才能让它正常工作?

import ffmpeg
import subprocess
import os

os.chdir('/home/Downloads/SRs/')
a = open('SRt.txt', 'r')
b = a.readlines()
a.close()
for c in range(0, len(b)-1):
    words = list(b[c].split(" "))
    d = len(words)
    e = words[d-1]
    f = b[c].replace(e, 'FR' + str(c) + '.mp4')
    words[d-1] = 'FR' + str(c) + '.mp4'
    print(f)
    subprocess.call(f, shell=True)
    subprocess.call([
        'ffmpeg',
        '-i',
        "'FR' + str(c) + '.mp4'",
        '-vf scale=320:240',
        words[d-1],
        ])

以下是原始文件的一些示例:

 ffmpeg -i SR.mp4 -ss 00:00:00 -to 00:01:22 -c:v copy -a copy CPH.mp4
 ffmpeg -i SR.mp4 -ss 00:01:24 -to 00:02:58 -c:v copy -a copy CG.mp4
 ffmpeg -i SR.mp4 -ss 00:02:59 -to 00:05:41 -c:v copy -a copy CSGP.mp4

没什么特别的,只需将视频分成单独的片段,然后在调整大小之前重新保存即可。

我尝试过:

z=subprocess.call(f, shell=True, stdout=subprocess.PIPE)
print(z)

但我得到的只是“1”。

当我将其更改为:

z=subprocess.call(f, shell=True, stderr=subprocess.PIPE)
print(z)

我得到的只是“1”。

也许我做错了什么。

ffmpeg subprocess os.system
1个回答
0
投票

根据我对您问题的理解,这就是我的想法。我的系统没有安装 ffmpeg,也没有任何视频可以测试,所以我注释掉了

subprocess.run()
行。所有要做的就是将文本文件中的行转换为您可以调用的命令。
SRt.txt

我的示例 SRt.txt 的内容

with open("SRt.txt") as stream: for line_number, line in enumerate(stream): # line_number=0 for line 1, # line_number=1 for line 2, ... command = line.split() # Last file name is tokens[-1] command[-1] = f"SR{line_number}.mp4" # Insert -vf scale=320:240 command[-2:-1] = ["-vf", "scale=320:240"] print(line, end="") print(command) print() # subprocess.run(command, shell=True)

输出:

ffmpeg -i SR.mp4 -ss 00:00:00 -to 00:01:22 -c:v copy -a copy CPH.mp4 ffmpeg -i foo.mp4 -ss 00:01:24 -to 00:02:58 -c:v copy -a copy CG.mp4 ffmpeg -i bar.mp4 -ss 00:02:59 -to 00:05:41 -c:v copy -a copy CSGP.mp4

注意:如果您不想要
ffmpeg -i SR.mp4 -ss 00:00:00 -to 00:01:22 -c:v copy -a copy CPH.mp4 ['ffmpeg', '-i', 'SR.mp4', '-ss', '00:00:00', '-to', '00:01:22', '-c:v', 'copy', '-a', '-vf', 'scale=320:240', 'SR0.mp4'] ffmpeg -i foo.mp4 -ss 00:01:24 -to 00:02:58 -c:v copy -a copy CG.mp4 ['ffmpeg', '-i', 'foo.mp4', '-ss', '00:01:24', '-to', '00:02:58', '-c:v', 'copy', '-a', '-vf', 'scale=320:240', 'SR1.mp4'] ffmpeg -i bar.mp4 -ss 00:02:59 -to 00:05:41 -c:v copy -a copy CSGP.mp4 ['ffmpeg', '-i', 'bar.mp4', '-ss', '00:02:59', '-to', '00:05:41', '-c:v', 'copy', '-a', '-vf', 'scale=320:240', 'SR2.mp4']

部分,请将其注释掉

    

© www.soinside.com 2019 - 2024. All rights reserved.