[PYTHON] Importieren Sie Videos mit Seriennummer zusammen mit Aviutl

Einführung

Der Zweck dieses Artikels besteht darin, die Videos mit Seriennummern, die durch Überspringen der Videos mithilfe des Artikels (https://qiita.com/merarli/items/1b7819adbae7fad3c9b4) erstellt wurden, automatisch in Aviutl zu importieren. Ich werde. __ Daher wird davon ausgegangen, dass die folgenden Videos mit Seriennummern vorhanden sind. フォルダ.PNG

Motivation zur Schöpfung

Es ist mir gelungen, mit dem großen Anführer __ (https://qiita.com/merarli/items/1b7819adbae7fad3c9b4/)__ automatisch zu springen, aber das nächste, worauf ich warte, ist Aviutl Es war auf die erweiterte Zeitachse von zu ziehen. Wenn Sie gerne Videos veröffentlichen und Geld verdienen möchten, macht es keinen Sinn, den Sprungschnitt zu automatisieren ... Nun, was machen Sie? !! Ich habe es mit dem Motiv von geschaffen.

Ergebnis

Ich werde den zuvor erstellten Code einfügen.


import glob#Liste abrufen
import pathlib#Es scheint, dass dieser ähnlich wie Glob bequemer ist
import subprocess
from re import sub
from os import path#Pfadverbindung
import sys

m_path=r"D:\movie\JumpCut_note_DT"#Videopfad
file_exo=open(path.join(m_path,"make_exo.exo"),mode='w')
#Videodatenimport pathlib
l_movie = pathlib.Path(m_path).glob(r'**\*.mp4')
movie_name=[]#Zum Speichern von Dateinamen
for p in l_movie:
    movie_name.append(p.name)#Elemente hinzufügen
    print(p.name)
num= lambda val : int(sub('\\D','', val))#Zahlen aus Dateinamen extrahieren
movie_name=sorted(movie_name,key = num)#Sortieren
print(movie_name)


#Ausgang der Grundeinstellung Mit ffmpeg lesen
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()#Listenspeicher getrennt durch Zeilenvorschubzeichen

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)#Zeichenfolgenberechnungsfunktion 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)

#exo Schöpfung
flame_all = []#Anzahl der Videobilder
n=0#Anzahl der Wiederholungen
s_flame=1#Anfangsrahmen
e_flame=0#Rahmen beenden
#Videodaten
for m_num in movie_name:
    n=movie_name.index(m_num)#Anzahl der Wiederholungen
    #[]Videobestellung
    print('[',n,']',sep="",file=file_exo)#Sep-Trennzeichen Standardraum mit halber Breite
    #Videostart-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"))#Der Rückgabewert des Unterprozesses ist Byte?Also konvertiere zu utf8
    flame_all[n]=flame_all[n].rstrip('\r\n')#Löschen Sie das Zeilenvorschubzeichen am Ende
    e_flame = int(flame_all[n])+int(e_flame)#Aktuelle Anzahl der Flammen+Anzahl der Frames am Ende des letzten Males
    print('start=',s_flame,sep="",file=file_exo)
    s_flame=int(e_flame)+1#Anzahl der nächsten Startrahmen=Anzahl der Frames am Ende des letzten Males+1
    print('end=',e_flame,sep="",file=file_exo)
    print('layer=',1,sep="",file=file_exo)#Videodatei 1,Audiodatei 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=Videodatei',sep="",file=file_exo)#Verwenden Sie für Audiodateien Audiodateien
    print('Wiedergabeposition=',1,sep="",file=file_exo)
    print('Wiedergabegeschwindigkeit=',100.0,sep="",file=file_exo)
    print('Loop-Wiedergabe=',0,sep="",file=file_exo)
    print('Alphakanal laden=',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=Standardzeichnung',sep="",file=file_exo)
    print('X=',0.0,sep="",file=file_exo)#Koordinate X.,Y,Z
    print('Y=',0.0,sep="",file=file_exo)
    print('Z=',0.0,sep="",file=file_exo)
    print('Expansionsrate=',100.00,sep="",file=file_exo)
    print('Transparenz=',0.0,sep="",file=file_exo)
    print('Drehung=''{:.2f}'.format(0.00),sep="",file=file_exo)
    print('blend=',0,sep="",file=file_exo)
#Sprachdaten
s_flame=1#Anfangsrahmen
e_flame=0#Rahmen beenden
for m_num in movie_name:
    n=movie_name.index(m_num)#Anzahl der Wiederholungen
    n_v=movie_name.index(m_num)+len(movie_name)#Anzahl der sequentiellen Datenwiederholungen+movie_Anzahl der Elemente im Namen
    #[]Videobestellung
    print('[',n_v,']',sep="",file=file_exo)#Sep-Trennzeichen Standardraum mit halber Breite
    #Videostart-Ich brauchte end ffmpeg nicht, weil ich es im Video gemacht habe
    e_flame = int(flame_all[n])+int(e_flame)#Aktuelle Anzahl der Flammen+Anzahl der Frames am Ende des letzten Males
    print('start=',s_flame,sep="",file=file_exo)
    s_flame=int(e_flame)+1#Anzahl der nächsten Startrahmen=Anzahl der Frames am Ende des letzten Males+1
    print('end=',e_flame,sep="",file=file_exo)
    print('layer=',2,sep="",file=file_exo)#Audiodatei 2
    print('group=',n+1,sep="",file=file_exo)#Bleib n
    print('overlay=',1,sep="",file=file_exo)
    print('audio=',1,sep="",file=file_exo)#Stattdessen Kamera gelöscht, die hier nicht im Video war
    print('[''{:.1f}'']'.format(n_v),sep="",file=file_exo)
    print('_name=Audiodatei',sep="",file=file_exo)#AudiodateiではAudiodateiにする
    print('Wiedergabeposition=''{:.2f}'.format(0.00),sep="",file=file_exo)#Es war 1 im Video
    print('Wiedergabegeschwindigkeit=',100.0,sep="",file=file_exo)
    print('Loop-Wiedergabe=',0,sep="",file=file_exo)
    print('Funktioniert mit Videodateien=',1,sep="",file=file_exo)
    if n==0 :#So war es in 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=Standardwiedergabe',sep="",file=file_exo)#動画では標準描画 音声 Standardwiedergabe
    print('Volumen=',100.0,sep="",file=file_exo)
    print('Links und rechts=',0.0,sep="",file=file_exo)

print(flame_all) 
file_exo.close()

Wie benutzt man

Legen Sie den Pfad fest, in dem das Video in der Variablen platziert wird (m_path). Wenn Sie es anschließend mit einer Eingabeaufforderung oder anaconda ausführen, wird eine Bearbeitungsdatendatei (make_exo.exo) für aviutl direkt unter m_path erstellt. Wenn Sie make_exo.exo auf die erweiterte Timeline von aviutl ziehen, werden die Videos mit der Seriennummer in die Timeline geladen.

Beschreibung der Exo-Datei

Die Erläuterung der exo-Datei der Beispieldaten wird unten beschrieben. Da es sich möglicherweise um eine Seriennummer handelt, erstellen Sie ein Programm, das Informationen gemäß den Regeln dieser Datei ausgibt. Ich kann nicht jeden Parameter bestätigen, da ich ihn im Grunde nur aus der Exo-Datei gelesen habe.

[exedit]
width=908//Video Größe
height=512//
rate=30//Bildrate
scale=1
length=129//Gesamtendrahmen
audio_rate=44100
audio_ch=2
[0]//Videodateistart 0->1->2
start=1 //Rahmen starten
end=79 //Rahmen beenden
layer=1 
group=1
overlay=1 
camera=0
[0.0] //0.0->1.0->2.0
_name=Videodatei
Wiedergabeposition=1
Wiedergabegeschwindigkeit=100.0
Loop-Wiedergabe=0
Alphakanal laden=0
file=D:\movie\JumpCut_note_DT\0_out_.mp4
[0.1] //0.1->1.1->2.1
_name=Standardzeichnung
X=0.0
Y=0.0
Z=0.0
Expansionsrate=100.00
Transparenz=0.0
Drehung=0.00
blend=0
[1]
start=80
end=100
layer=1
group=2
overlay=1
camera=0
[1.0]
_name=Videodatei
Wiedergabeposition=1
Wiedergabegeschwindigkeit=100.0
Loop-Wiedergabe=0
Alphakanal laden=0
file=D:\movie\JumpCut_note_DT\1_out_.mp4
[1.1]
_name=Standardzeichnung
X=0.0
Y=0.0
Z=0.0
Expansionsrate=100.00
Transparenz=0.0
Drehung=0.00
blend=0
[2]//Audiodatei starten
start=1
end=79
layer=2
group=1
overlay=1
audio=1
[2.0]
_name=Audiodatei
Wiedergabeposition=0.00
Wiedergabegeschwindigkeit=100.0
Loop-Wiedergabe=0
Funktioniert mit Videodateien=1
file=
[2.1]
_name=Standardwiedergabe
Volumen=100.0
Links und rechts=0.0
[3]
start=80
end=100
layer=2
group=2
overlay=1
audio=1
[3.0]
_name=Audiodatei
Wiedergabeposition=0.00
Wiedergabegeschwindigkeit=100.0
Loop-Wiedergabe=0
Funktioniert mit Videodateien=1
file=
[3.1]
_name=Standardwiedergabe
Volumen=100.0
Links und rechts=0.0

Diese Code-Erklärung

Ich kann es zu einem späteren Zeitpunkt schreiben. Es wird in der Reihenfolge der exo-Basisdatei in eine Textdatei ausgegeben.

Schließlich

Dieses Programm wurde von einem Amateur des Programms erstellt, um es einfacher zu machen. Daher denke ich, dass es viele Fälle gibt, in denen der Weg zum Schreiben eines Programms nicht erreicht ist. In diesem Fall würde ich mich freuen, wenn Sie mich in den Kommentaren informieren könnten. Habt ein gutes Video-Posting-Leben! !!

Recommended Posts

Importieren Sie Videos mit Seriennummer zusammen mit Aviutl
Verbinde eine große Anzahl von Videos miteinander!
WEB-Scraping mit BeautifulSoup4 (Seriennummernseite)
Löschen und generieren Sie Seriennummerndateien mit einem Shell-Skript
Serielle Kommunikation mit Python
Serielle Kommunikation mit Python
Importieren Sie tsv mit Python
Erstellen Sie mit matplotlib eine GIF-Animation aus einer Seriennummerndatei
[Python] Mit OpenCV können Sie problemlos Bilddateien mit Seriennummern lesen