我正在使用此脚本对整个文件夹的刻录字幕进行编码:
for filepath in newFiles:
video = os.path.basename(filepath)
videoName = os.path.splitext(video)[0]
newFile = '%s.mp4' % videoName
i = filepath
o = os.path.join(destinationDirectory, newFile)
if os.path.isfile(o):
continue
encodeCommand = f'ffmpeg -i "{i}" -vf "scale=-2:480, subtitles="{video}":force_style='PrimaryColour=&H0300FFFF&'" -c:v libx264 -profile:v baseline -level 3.0 -preset fast -crf 23 -pix_fmt yuv420p "{o}"'
print('Encoding %s' % newFile)
encode = os.popen(encodeCommand).read()
但是,force_style='PrimaryColour=&H0300FFFF&'
不起作用,只是保持原始文件中内置的字幕不变。我之所以使用,subtitles="{video}"
是因为它使用了视频文件中保存的字幕。'force_style'
只有当我提供单独的字幕文件时才有效?
我尝试了多种引号组合来查看问题是否出在这里,但脚本却无法运行。这个脚本仍然运行,只是没有改变字幕的颜色。
编辑:突然它不运行了。说 PrimaryColour 是无效语法。我没有做任何更改
答案1
问题出在 f 字符串上。它用单引号打开和关闭,因此里面的任何单引号都会导致语法问题。它用三重引号打开和关闭,因此单引号可用于样式设置。
encodeCommand = f'''ffmpeg -i "{i}" -vf "scale=-2:480,subtitles={video}:force_style='PrimaryColour=&H0300FFFF&,MarginV=50'" -c:v libx264 -profile:v baseline -level 3.0 -preset fast -crf 23 -pix_fmt yuv420p "{o}"'''