Kann ein Win10-GURU diese Lösung zum Teilen von Videos bei Änderungen der Auflösung automatisieren?

468
EverT

Kann ein Windows10-Guru helfen, dies zu automatisieren?

Ich habe die Lösung von Lord Neckbeard im folgenden Beitrag nicht automatisieren können: Wie werden Videodateien bei festgestellter Änderung der Auflösung aufgeteilt? (dh aufgezeichnete Streams mit mehreren Breiten)

Idealerweise sollte ich die Batchdatei entweder für ein gesamtes Videoverzeichnis ausführen oder das Video zumindest in einer Batchdatei im Datei-Explorer ablegen.

Beispieldatei (temporarily available): Example.flv

Fehler:
Ich habe mich als letzter Ausweg auf Powershell zurückgezogen, was jedoch zu Problemen bei der Code-Signatur führt.
Ich habe versucht, die eindeutigen Änderungen mithilfe einer Batchdatei zu extrahieren, aber ich konnte die Variablen nicht dazu bringen, ihre Werte innerhalb von Schleifen oder Subroutinen beizubehalten. Einer von vielen Versuchen:

SETLOCAL ENABLEDELAYEDEXPANSION SET lastres=none FOR /F "eol=; tokens=1,2,3 delims=, " %%i in (allkeyframes.txt) do (  if %j == %lastres% (echo "ignore") ELSE ( set lastres=%%j echo %%j %%i %%k  echo !lastres!  )  )  

Ich habe versucht, den Inhalt von resolutionchanges.txt zu extrahieren, SET /P segs=<resolutionchanges.txtaber alles, was ich bekam, waren Sonderzeichen und Nullen.

SET /P segs=<resolutionchanges.txt set filenam=%1 echo %segs% echo %filenam% echo S:\_sys\ffmpeg\bin\ffmpeg -i %1 -map 0 -c copy -segment_times %segs% -reset_timestamps 1 -f segment %filenam%_%%03d.flv ) pause 

Hier ist der aktuell laufende "manuelle" Prozess:

Ziehen Sie das Video in eine Batchdatei, die Folgendes enthält:

ffprobe -v error -show_entries frame = pkt_pts_time, width, height -elect_streams v -of csv = p = 0% 1> allkeyframes.txt

(allkeyframes.txt-Beispiel ...)

13.652000,640,480 13.755000,640,480 13.597000,480,360 13.652000,480,360 

Diesen Text in POWERSHELL einfügen:

$o="" $n=0 foreach($line in (Get-Content allkeyframes.txt)){ $nline = $line.Split(",") $nline2=($nline[1]+$nline[2]) if ($nline2 -ne $preventry) { $n0=$nline[0] $o="$o,$n0" $n=$n0 } $preventry = $nline2 } if ($o.length -gt 1){ echo $o.Remove(0,1) > resolutionchanges.txt } else { Write-Host "No resolution changes found" -ForegroundColor Red } 

(resolutionchanges.txt :)

13.597000,25.618000,33.628000,45.598000 

Geben Sie im Befehlsfenster Folgendes ein, nachdem Sie den Inhalt von resolutionchanges.txt eingefügt und "input.flv" in den Videonamen geändert haben (Win10 lehnte meine Versuche ab, dies zu stapeln):

ffmpeg -i input.flv -map 0 -c kopiert -segment_times 13.597000,25.618000,33.628000,45.598000 -reset_timestamps 1 -f Segmentausgabe_% 03d.flv

2
Da es sich immer noch um die gleiche Frage wie zuvor handelt, sollten Sie Ihre Probleme in diesem anderen Beitrag kommentieren, damit Lord Neckbeard seine Antwort verbessern und eine voll funktionsfähige Lösung erhalten kann. music2myear vor 6 Jahren 0
@ music2myear Die ursprüngliche Frage bestand im Wesentlichen aus zwei Fragen, daher schlug ich vor, sie in zwei Teile zu unterteilen: 1) Verwendung von ffmpeg zum Aufteilen von Videos basierend auf Änderungen der Videobreite x Höhe (die beantwortet wurde) und 2) Implementierung dies in ein Windows-Skript (von dem ich nichts weiß). LordNeckbeard vor 6 Jahren 0
@EverT Wäre es möglich, ein kurzes Beispielvideo hochzuladen, um damit zu spielen? nixda vor 6 Jahren 0
@nixda Ich habe eine 3Meg-Beispieldatei mit gemischter Auflösung im Beitrag hinzugefügt. EverT vor 6 Jahren 0

0 Antworten auf die Frage