Le but de cet article est d'importer automatiquement les vidéos avec les numéros de série créés à la suite de la découpe des vidéos à l'aide de l'article (https://qiita.com/merarli/items/1b7819adbae7fad3c9b4) dans Aviutl. Je vais. __ Par conséquent, il est supposé que les vidéos suivantes avec des numéros de série existent.
J'ai réussi à sauter automatiquement avec le grand leader __ (https://qiita.com/merarli/items/1b7819adbae7fad3c9b4/)__, mais la prochaine chose que j'attends est Aviutl Il s'agissait de faire glisser vers la chronologie étendue de. Si vous voulez profiter de la publication de vidéos et gagner de l'argent, il ne sert à rien d'automatiser le saut de coupure ... Eh bien, que faites-vous! !! Je l'ai créé avec le motif de.
Je mettrai le code créé plus tôt.
import glob#Obtenir la liste
import pathlib#Il semble que celui-ci similaire à glob soit plus pratique
import subprocess
from re import sub
from os import path#Connexion de chemin
import sys
m_path=r"D:\movie\JumpCut_note_DT"#Chemin vidéo
file_exo=open(path.join(m_path,"make_exo.exo"),mode='w')
#Importation de données vidéo pathlib
l_movie = pathlib.Path(m_path).glob(r'**\*.mp4')
movie_name=[]#Pour stocker les noms de fichiers
for p in l_movie:
movie_name.append(p.name)#Ajouter des éléments
print(p.name)
num= lambda val : int(sub('\\D','', val))#Extraire les numéros des noms de fichiers
movie_name=sorted(movie_name,key = num)#Trier
print(movie_name)
#Sortie de réglage initial Lire avec ffmpeg
movie_size=subprocess.run(["ffprobe","-v","error","-select_streams","v:0","-show_entries","stream=width,height,r_frame_rate","-of","default=nokey=1:noprint_wrappers=1",path.join(m_path,movie_name[1])],stdout=subprocess.PIPE, stderr=subprocess.PIPE)
movie_size = movie_size.stdout.decode("utf8")
movie_size = movie_size.splitlines()#Stockage de liste séparé par des caractères de saut de ligne
print(movie_name[0])
print("movie_size\n"+ movie_size[0])
print(path.join(m_path,movie_name[0]))
print("[exedit]",file=file_exo)
print("width=",movie_size[0],sep="",file=file_exo)
print("hight=",movie_size[1],sep="",file=file_exo)
print("rate=",eval(movie_size[2]),sep="",file =file_exo)#Fonction de calcul de chaîne de caractères eval
print("scale=",1,sep="",file =file_exo)
print("langh=",1,sep="",file=file_exo)
print("audio_rate=",44100,sep="",file=file_exo)
print("audio_ch=",2,sep="",file=file_exo)
#création exo
flame_all = []#Nombre d'images vidéo
n=0#Nombre de répétitions
s_flame=1#Cadre de début
e_flame=0#Cadre d'extrémité
#Données vidéo
for m_num in movie_name:
n=movie_name.index(m_num)#Nombre de répétitions
#[]Ordre des vidéos
print('[',n,']',sep="",file=file_exo)#séparateur sép. espace demi-largeur par défaut
#Début de la vidéo-end
flame =subprocess.run(["ffprobe","-v","error","-select_streams","v:0","-show_entries","stream=nb_frames","-of","default=nokey=1:noprint_wrappers=1",path.join(m_path,m_num)],stdout=subprocess.PIPE, stderr=subprocess.PIPE)
flame_all.append(flame.stdout.decode("utf8"))#La valeur de retour du sous-processus est byte?Alors convertissez-vous en utf8
flame_all[n]=flame_all[n].rstrip('\r\n')#Supprimer le caractère de saut de ligne à la fin
e_flame = int(flame_all[n])+int(e_flame)#Nombre actuel de flammes+Nombre d'images à la fin de la dernière fois
print('start=',s_flame,sep="",file=file_exo)
s_flame=int(e_flame)+1#Nombre d'images de départ suivantes=Nombre d'images à la fin de la dernière fois+1
print('end=',e_flame,sep="",file=file_exo)
print('layer=',1,sep="",file=file_exo)#Fichier vidéo 1,Fichier audio 2
print('group=',n+1,sep="",file=file_exo)
print('overlay=',1,sep="",file=file_exo)
print('camera=',0,sep="",file=file_exo)
print('[''{:.1f}'']'.format(n),sep="",file=file_exo)
print('_name=Fichier vidéo',sep="",file=file_exo)#Créer un fichier audio pour un fichier audio
print('Position de lecture=',1,sep="",file=file_exo)
print('Vitesse de lecture=',100.0,sep="",file=file_exo)
print('Lecture en boucle=',0,sep="",file=file_exo)
print('Charger le canal alpha=',0,sep="",file=file_exo)
print('file=',path.join(m_path,m_num),sep="",file=file_exo)
print('[',n+0.1,']',sep="",file=file_exo)
print('_name=Dessin standard',sep="",file=file_exo)
print('X=',0.0,sep="",file=file_exo)#Coordonnée X,Y,Z
print('Y=',0.0,sep="",file=file_exo)
print('Z=',0.0,sep="",file=file_exo)
print('Taux d'expansion=',100.00,sep="",file=file_exo)
print('Transparence=',0.0,sep="",file=file_exo)
print('rotation=''{:.2f}'.format(0.00),sep="",file=file_exo)
print('blend=',0,sep="",file=file_exo)
#Données vocales
s_flame=1#Cadre de début
e_flame=0#Cadre d'extrémité
for m_num in movie_name:
n=movie_name.index(m_num)#Nombre de répétitions
n_v=movie_name.index(m_num)+len(movie_name)#Nombre de répétitions de données séquentielles+movie_Nombre d'éléments dans le nom
#[]Ordre des vidéos
print('[',n_v,']',sep="",file=file_exo)#séparateur sép. espace demi-largeur par défaut
#Début de la vidéo-Je n'ai pas besoin de finir ffmpeg parce que je l'ai fait dans la vidéo
e_flame = int(flame_all[n])+int(e_flame)#Nombre actuel de flammes+Nombre d'images à la fin de la dernière fois
print('start=',s_flame,sep="",file=file_exo)
s_flame=int(e_flame)+1#Nombre d'images de départ suivantes=Nombre d'images à la fin de la dernière fois+1
print('end=',e_flame,sep="",file=file_exo)
print('layer=',2,sep="",file=file_exo)#Fichier audio 2
print('group=',n+1,sep="",file=file_exo)#Reste n
print('overlay=',1,sep="",file=file_exo)
print('audio=',1,sep="",file=file_exo)#Caméra supprimée à la place, qui n'était pas dans la vidéo ici
print('[''{:.1f}'']'.format(n_v),sep="",file=file_exo)
print('_name=Fichier audio',sep="",file=file_exo)#Fichier audioではFichier audioにする
print('Position de lecture=''{:.2f}'.format(0.00),sep="",file=file_exo)#C'était 1 dans la vidéo
print('Vitesse de lecture=',100.0,sep="",file=file_exo)
print('Lecture en boucle=',0,sep="",file=file_exo)
print('Fonctionne avec les fichiers vidéo=',1,sep="",file=file_exo)
if n==0 :#C'était comme ça dans sample1
print('file=',path.join(m_path,m_num),sep="",file=file_exo)
else:
print('file=',sep="",file=file_exo)
#print('file=',path.join(m_path,m_num),sep="",file=file_exo)
print('[',n_v+0.1,']',sep="",file=file_exo)#n->n_v
print('_name=Lecture standard',sep="",file=file_exo)#動画では標準描画 音声 Lecture standard
print('Le volume=',100.0,sep="",file=file_exo)
print('Gauche et droite=',0.0,sep="",file=file_exo)
print(flame_all)
file_exo.close()
Définissez le chemin où la vidéo est placée dans la variable (m_path). Après cela, si vous l'exécutez avec une invite de commande ou anaconda, un fichier de données d'édition (make_exo.exo) pour aviutl sera créé directement sous m_path. Si vous faites glisser make_exo.exo vers la chronologie étendue d'aviutl, les vidéos numérotées de série seront chargées dans la chronologie.
L'explication du fichier exo des données d'exemple est décrite ci-dessous. Puisqu'il peut s'agir d'un numéro de série, créez un programme qui génère des informations selon les règles de ce fichier. Je ne peux pas confirmer chaque paramètre car je viens de le lire à partir du fichier exo.
[exedit]
width=908//Taille de la vidéo
height=512//
rate=30//fréquence d'images
scale=1
length=129//Cadre final global
audio_rate=44100
audio_ch=2
[0]//Début du fichier vidéo 0->1->2
start=1 //Cadre de départ
end=79 //Cadre d'extrémité
layer=1
group=1
overlay=1
camera=0
[0.0] //0.0->1.0->2.0
_name=Fichier vidéo
Position de lecture=1
Vitesse de lecture=100.0
Lecture en boucle=0
Charger le canal alpha=0
file=D:\movie\JumpCut_note_DT\0_out_.mp4
[0.1] //0.1->1.1->2.1
_name=Dessin standard
X=0.0
Y=0.0
Z=0.0
Taux d'expansion=100.00
Transparence=0.0
rotation=0.00
blend=0
[1]
start=80
end=100
layer=1
group=2
overlay=1
camera=0
[1.0]
_name=Fichier vidéo
Position de lecture=1
Vitesse de lecture=100.0
Lecture en boucle=0
Charger le canal alpha=0
file=D:\movie\JumpCut_note_DT\1_out_.mp4
[1.1]
_name=Dessin standard
X=0.0
Y=0.0
Z=0.0
Taux d'expansion=100.00
Transparence=0.0
rotation=0.00
blend=0
[2]//Démarrer le fichier audio
start=1
end=79
layer=2
group=1
overlay=1
audio=1
[2.0]
_name=Fichier audio
Position de lecture=0.00
Vitesse de lecture=100.0
Lecture en boucle=0
Fonctionne avec les fichiers vidéo=1
file=
[2.1]
_name=Lecture standard
Le volume=100.0
Gauche et droite=0.0
[3]
start=80
end=100
layer=2
group=2
overlay=1
audio=1
[3.0]
_name=Fichier audio
Position de lecture=0.00
Vitesse de lecture=100.0
Lecture en boucle=0
Fonctionne avec les fichiers vidéo=1
file=
[3.1]
_name=Lecture standard
Le volume=100.0
Gauche et droite=0.0
Je peux l'écrire à une date ultérieure. Il est généré dans un fichier texte dans l'ordre du fichier exo de base.
Ce programme a été créé par un amateur du programme juste pour le rendre plus facile. Par conséquent, je pense qu'il existe de nombreux cas où la manière d'écrire un programme n'est pas atteinte. Dans ce cas, je vous serais reconnaissant de bien vouloir me le faire savoir dans les commentaires. Bonne vie de publication vidéo! !!
Recommended Posts