从昨晚开始我就一直在尝试让这个该死的程序运行起来,但似乎什么也做不了。我想先修剪视频,然后调整视频大小。我正在从一个文本文件中读取哪个视频以及给出最终名称的内容,超过 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.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']
部分,请将其注释掉