Я могу без проблем запустить этот код, но не саму функцию. Эта функция должна редактировать видео странным образом. Однако когда я пытаюсь запустить эту функцию, независимо от того, действителен путь или нет, я всегда получаю FileNotFoundError, даже если присутствуют все необходимые библиотеки. Я использую Python 3.12.2. Этот код взят из https://github.com/GanerCodes/videoEdit ... icecake.py.
import random, os
from subprocess import call
from pathHelper import *
iframe = bytes.fromhex('0001B0')
pframe = bytes.fromhex('0001B6')
spl = bytes.fromhex('30306463')
def ricecake(inputVideo, outputVideo, chance = 1, dups = 5, speed = True):
inputVideo, outputVideo = absPath(inputVideo), absPath(outputVideo)
splPath = os.path.splitext(inputVideo)
call(['ffmpeg', '-y', '-hide_banner', '-loglevel', 'fatal', '-i', inputVideo, newName := chName(inputVideo, f"RICECAKE{getName(inputVideo)}.avi")])
with open(newName, 'rb') as f:
frames = f.read().split(spl)
frameList = []
for index, frame in enumerate(frames):
frame += spl
if frames[5:8] == iframe:
frameList += [{'type': 'iframe', 'data': frame}]
else:
frameList += [{'type': 'pframe', 'data': frame}]
iframes = 0
pframes = 0
with open(finalTmpName := chName(outputVideo, f"TMP_RICECAKE_{getName(outputVideo)}.avi"), 'wb') as out:
for i, v in enumerate(frameList):
if v['type'] == 'iframe': iframes += 1
if v['type'] == 'pframe': pframes += 1
if v['type'] == 'pframe' and random.random() < chance:
for i in range(int(dups)):
out.write(v['data'])
else:
out.write(v['data'])
if inputVideo == outputVideo: os.remove(inputVideo)
speedFactor = dups * chance * pframes / (pframes + iframes)
cmd = ['ffmpeg', '-y', '-hide_banner', '-loglevel', 'fatal', '-i', finalTmpName]
if speed:
cmd += ['-vf', f'setpts=(1/{speedFactor})*PTS', '-af', f'atempo={speedFactor}']
cmd += [outputVideo]
call(cmd)
os.remove(newName)
os.remove(finalTmpName)
То же самое произойдет и с этим кодом (с https://github.com/GanerCodes/videoEdit ... atamosh.py)
from subprocess import run
from subprocessHelper import get_output
import os
fh = bytes.fromhex
def datamosh(video1, video2, replace_input = False, has_audio = True):
vid_tmp = f"{video1}_VID.avi"
aud_tmp = f"{video2}_AUD.mp3"
avi_out = f"{video1}_AVI.avi"
run(["ffmpeg", "-y", "-hide_banner", "-loglevel", "fatal", "-i", video1,
"-pix_fmt", "yuv420p", "-map", "0:v", vid_tmp])
if has_audio:
run(["ffmpeg", "-y", "-hide_banner", "-loglevel", "fatal", "-i", video1, "-map", "0:a", aud_tmp])
if os.path.isfile(avi_out): os.remove(avi_out)
with open(vid_tmp, 'rb') as oavi:
with open(avi_out, 'wb') as iavi:
pf = None
for fCount, f in enumerate(spl := oavi.read().split(fd := fh("30306463"))):
if fCount > len(f) - 3 or fCount < 3 or f[5:8] != fh("0001B0"):
iavi.write(f + fd)
else:
iavi.write(fh("00" * len(f)) + fd)
pf = f
fCount += 1
if has_audio:
run(["ffmpeg", "-y", "-hide_banner", "-loglevel", "fatal", "-i", avi_out, "-i", aud_tmp,
"-c:a", "copy", "-map", "0:v", "-map", "1:a", video2])
else:
run(["ffmpeg", "-y", "-hide_banner", "-loglevel", "fatal", "-i", avi_out, "-c:a", "copy",
"-map 0:v", video2])
os.remove(aud_tmp)
os.remove(avi_out)
if replace_input:
os.remove(video1)
os.rename(video2, video1)
После запуска сценария в IDLE я попробовал рисовый пирог("Vid.mp4", "Vid.mp4",10,20,True). Я ожидал, что видео будет изменено. Вместо этого я получаю FileNotFoundException, хотя все необходимые библиотеки Python установлены правильно и видеофайл присутствует. Какой файл Python пытался найти, чтобы вызвать эту ошибку? Почему этот код изначально работал так, как задумано, а теперь больше не работает?
Вот что я получаю:
Traceback (most recent call last):
File "", line 1, in
ricecake("Vid.mp4","Vid.mp4",10,20,True)
File "C:\Users\mikol\Downloads\videoEditBot-dev\videoEditBot-dev\editor\ricecake.py", line 14, in ricecake
call(['ffmpeg', '-y', '-hide_banner', '-loglevel', 'fatal', '-i', inputVideo, newName := chName(inputVideo, f"RICECAKE{getName(inputVideo)}.avi")])
File "C:\Program Files\Python312\Lib\subprocess.py", line 389, in call
with Popen(*popenargs, **kwargs) as p:
File "C:\Program Files\Python312\Lib\subprocess.py", line 1026, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Program Files\Python312\Lib\subprocess.py", line 1538, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] Nie można odnaleźć określonego pliku
Подробнее здесь: https://stackoverflow.com/questions/783 ... uld-work-b