Komprimieren von MKV-Datei endet mit x264 [error]: could not open input file `-'
#1
Hallo,

ich habe ein Problem beim Komprimieren von MKV-Dateien, welches mit der aktuellen Version 2018.11.11.1 reproduzierbar auf meinem Windows 10 (64 Bit) PC als auch in einer virtuellen Windows 7 (64 Bit) Maschine auftritt. Nach Sekundenbruchteilen bricht der Vorgang mit einer Fehlermeldung ab.

Es ist bei meinen Tests bei den meisten Ausgangsdateien in SD-Auflösung (aber nicht bei allen), nie hingegen bei HD-Auflösung aufgetreten. Aber das kann auch Zufall sein.

Eine Debug-Datei habe ich angefügt. Was mir aufgefallen ist:

In Hybrid selbst wird angezeigt:
x264 --preset superfast --pass 1 --bitrate 1500 --profile high --level 4.1 --direct auto --qcomp 0.5 --rc-lookahead 40 --aq-mode 0 --sar 16:15 --qpfile GENERATED_QP_FILE --non-deterministic --range tv --stats "\TestFilm.stats" --demuxer raw --input-res 720x576 --input-csp i420 --input-range tv --input-depth 8 --fps 25/1 --output-depth 8 --output NUL -

x264 --pass 2 --bitrate 1500 --profile high --level 4.1 --direct auto --qcomp 0.5 --no-mbtree --partitions i4x4,p8x8,b8x8 --no-fast-pskip --subme 5 --trellis 0 --weightp 1 --aq-mode 0 --vbv-maxrate 62500 --vbv-bufsize 78125 --sar 16:15 --qpfile GENERATED_QP_FILE --non-deterministic --range tv --colormatrix bt709 --stats "\TestFilm.stats" --demuxer raw --input-res 720x576 --input-csp i420 --input-range tv --input-depth 8 --fps 25/1 --output-depth 8 --output "TestFilm.264" -
Die Report-Datei hat jedoch diesen Inhalt:
x264 (1st pass bitrate) processing started...
starting 20_06_16_1310_02_video@20:08:16.947 - G:\TestTemp\TestFilm.mkv
"C:\PROGRA~1\Hybrid\64bit\x264.exe" --preset superfast --pass 1 --bitrate 1500 --profile high --level 4.1 --direct auto --qcomp 0.5 --rc-lookahead 40 --aq-mode 0 --sar 16:15 --non-deterministic --range tv --stats "G:\TestTemp\TestFilm_20_06_16_1310_02.stats" --demuxer y4m  --input-range tv --fps 25/1 --output-depth 8 --output NUL -
x264 [error]: could not open input file `-'
finished after 00:00:00.199 with exitCode -1
Crashed with exit status 0
Seltsam finde ich, dass anscheinend aus
--demuxer raw
Folgendes wird:
--demuxer y4m
wobei zwischen y4m und --input-range zwei Leerzeichen sind. Was das tatsächlich für eine Bedeutung hat vermag ich nicht zu sagen. Aber bei den Dateien, die keine Probleme machen passiert dieser Austausch nicht.

Auch wenn ich an den x264-Komprimierungseinstellungen herumspiele, bleibt das Problem im Wesentlichen genau so bestehen.

Kannst du bitte mal schauen, was da los ist?

Hier ein Video (4 MB), mit dem das Verhalten auftritt: https://bit.ly/2KsLrSr

P.S.: Wenn ich die HybridDebugOutput.txt ungezippt über die Funktion des Forums als Attachment hinzufügen will, schlägt dies fehl. Welchem Speicherbedarf "HybridDebugOutput.txt Kilobyte" entsprechen weiß ich leider nicht Tongue  
Bitte korrigiere die folgenden Fehler, bevor du fortfährst:

   Die angehängte Datei ist zu groß. Die maximal zulässige Größe für diesen Dateityp beträgt HybridDebugOutput.txt Kilobyte.


Attached Files
.zip   HybridDebugOutput.zip (Size: 17,33 KB / Downloads: 3)
Reply
#2
Quote:Seltsam finde ich, dass anscheinend aus
--demuxer raw
Folgendes wird:
--demuxer y4m
wobei zwischen y4m und --input-range zwei Leerzeichen sind.
Ist normal, ob der raw oder der y4m Demuxer verwendet wird hängt vom Decoder ab, der Anfangs noch nicht bekannt ist.

Quote:Aber bei den Dateien, die keine Probleme machen passiert dieser Austausch nicht.
Hängt wie gesagt vom Decoder ab.

Quote:Auch wenn ich an den x264-Komprimierungseinstellungen herumspiele, bleibt das Problem im Wesentlichen genau so bestehen.
Das Problem sind vermutlich auch nicht der Encoder sondern der Decoder oder das Filtering.

Quote:Wenn ich die HybridDebugOutput.txt ungezippt über die Funktion des Forums als Attachment hinzufügen will, schlägt dies fehl. Welchem Speicherbedarf "HybridDebugOutput.txt Kilobyte" entsprechen weiß ich leider nicht Tongue  
Kann ich nichts für, liegt an der Forensoftware. Keine Ahnung ob ich mal Zeit finde mich in den entsprechenden PHP code einzulesen und da eine Änderung vorzunehmen.

Zum Problem:
Wenn ich mir den DebugOutput anschaue sieht eigentlich alles okay aus:
1. Video wird mit Vapoursynth gefiltert
# Imports
import os
import sys
import ctypes
Dllref = ctypes.windll.LoadLibrary("C:/Program Files/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll")
# Loading Support Files
Dllref = ctypes.windll.LoadLibrary("C:/Program Files/Hybrid/64bit/vsfilters/Support/OpenCL.dll")
import vapoursynth as vs
core = vs.get_core()
# Import scripts folder
scriptPath = 'C:/Program Files/Hybrid/64bit/vsscripts'
sys.path.append(os.path.abspath(scriptPath))
# Loading Plugins
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/GrainFilter/AddGrain/AddGrain.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/FFT3DFilter/fft3dfilter.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/DFTTest/DFTTest.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/EEDI3.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/ResizeFilter/nnedi3/vsznedi3.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/libmvtools.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/temporalsoften.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/scenechange.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/SourceFilter/LSmashSource/vslsmashsource.dll")
# Import scripts
import havsfunc
# Loading G:\TestFilm.mkv using LWLibavSource
clip = core.lsmas.LWLibavSource(source="G:/TestFilm.mkv", format="YUV420P8", cache=0)
# making sure input color matrix is set as unspec
clip = core.resize.Point(clip, matrix_in_s="unspec",range_s="limited")
# making sure frame rate is set to 25/1
clip = core.std.AssumeFPS(clip, fpsnum=25, fpsden=1)
# Setting color range to TV (limited) range.
clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
# setting field order to what QTGMC should assume
clip = core.std.SetFrameProp(clip=clip, prop="_FieldBased", intval=2)
# Deinterlacing using QTGMC
clip = havsfunc.QTGMC(Input=clip, Preset="Fast", TFF=True)
clip = clip[::2]
# Output
clip.set_output()
2. Zum Interpretieren des Vapoursynthscripts wird VsPipe verwendet:
"C:\PROGRA~1\Hybrid\64bit\VAPOUR~1\vspipe.exe" "G:\TestTemp\encodingTempSynthSkript_20_06_16_1310.vpy" - --y4m
3. Zum Encodieren wird:
"C:\PROGRA~1\Hybrid\64bit\x264.exe" --preset superfast --pass 1 --bitrate 1500 --profile high --level 4.1 --direct auto --qcomp 0.5 --rc-lookahead 40 --aq-mode 0 --sar 16:15 --non-deterministic --range tv --stats "G:\TestTemp\TestFilm_20_06_16_1310_02.stats" --demuxer y4m  --input-range tv --fps 25/1 --output-depth 8 --output NUL -
Der komplette De-/Encoding-Aufurf sieht bei Dir so aus:
"C:\PROGRA~1\Hybrid\64bit\VAPOUR~1\vspipe.exe" "G:\TestTemp\encodingTempSynthSkript_20_06_16_1310.vpy" - --y4m | "C:\PROGRA~1\Hybrid\64bit\x264.exe" --preset superfast --pass 1 --bitrate 1500 --profile high --level 4.1 --direct auto --qcomp 0.5 --rc-lookahead 40 --aq-mode 0 --sar 16:15 --non-deterministic --range tv --stats "G:\TestTemp\TestFilm_20_06_16_1310_02.stats" --demuxer y4m  --input-range tv --fps 25/1 --output-depth 8 --output NUL -

Problem ist nur, dass der VsPipe-Aufruf bei Dir fehlzuschlagen scheint.
Wenn ich das Versuche hier nachzustellen wird bei mir auch:
vspipe "E:\Temp\encodingTempSynthSkript_05_08_09_2010.vpy" - --y4m | x264 --preset superfast --pass 1 --bitrate 1500 --profile high --level 4.1 --direct auto --sync-lookahead 27 --qcomp 0.5 --rc-lookahead 40 --aq-mode 0 --sar 16:15 --non-deterministic --range tv --stats "E:\Temp\TestFilm_05_08_09_2010_02.stats" --demuxer y4m  --input-range tv --fps 25/1 --output-depth 8 --output NUL -
mit:
# Imports
import os
import sys
import ctypes
Dllref = ctypes.windll.LoadLibrary("I:/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll")
# Loading Support Files
Dllref = ctypes.windll.LoadLibrary("I:/Hybrid/64bit/vsfilters/Support/OpenCL.dll")
import vapoursynth as vs
core = vs.get_core()
# Import scripts folder
scriptPath = 'I:/Hybrid/64bit/vsscripts'
sys.path.append(os.path.abspath(scriptPath))
# Loading Plugins
core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/GrainFilter/AddGrain/AddGrain.dll")
core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/DenoiseFilter/FFT3DFilter/fft3dfilter.dll")
core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/DenoiseFilter/DFTTest/DFTTest.dll")
core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/Support/EEDI3.dll")
core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/ResizeFilter/nnedi3/vsznedi3.dll")
core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/Support/libmvtools.dll")
core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/Support/temporalsoften.dll")
core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/Support/scenechange.dll")
core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/SourceFilter/LSmashSource/vslsmashsource.dll")
# Import scripts
import havsfunc
# Loading C:\Users\Selur\Desktop\TestFilm.mkv using LWLibavSource
clip = core.lsmas.LWLibavSource(source="C:/Users/Selur/Desktop/TestFilm.mkv", format="YUV420P8", cache=0)
# making sure input color matrix is set as unspec
clip = core.resize.Point(clip, matrix_in_s="unspec",range_s="limited")
# making sure frame rate is set to 25/1
clip = core.std.AssumeFPS(clip, fpsnum=25, fpsden=1)
# Setting color range to TV (limited) range.
clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
# setting field order to what QTGMC should assume
clip = core.std.SetFrameProp(clip=clip, prop="_FieldBased", intval=2)
# Deinterlacing using QTGMC
clip = havsfunc.QTGMC(Input=clip, Preset="Fast", TFF=True)
clip = clip[::2]
# Output
clip.set_output()
als Vapoursynth script verwendet.

y4m [error]: bad sequence header magic
process finished with exitcode: -1 and exitStatue: 0
finished after 00:00:00.199 with exitCode -1
Crashed with exit status 0
Weißt auch darauf hin, das x264 keine oder kaputte Informationen vom Decoder/Interpreter erhält.

Da es bei mir ohne Probleme läuft vermute ich aktuell, dass es entweder ein generelles Problem mit Vapoursynth auf dem System gibt was Du verwendest, da irgendetwas dazwischen funkt (Virenscanner&Co) oder ein anderer Decoder verwendet werden muss.
Würde empfehlen:
1. Teste ob der 'Vapoursynth Preview' (Filtering, rechts unten unter der 'Support'-Auswahl), falls der Vapoursynth Preview geht liegt es schon mal nicht am Decoder und am Vapoursynth Setup. Falls er nicht klappt sollte im 'Vapoursynth Preview'-Fenster ein Fehler auftauchen, der mir helfen sollte das Problem zu beheben.
2. Falls der 'Vapoursynth Preview' ohne Probleme klappt, ruf mal bitte:
"C:\PROGRA~1\Hybrid\64bit\VAPOUR~1\vspipe.exe" "G:\TestTemp\encodingTempSynthSkript_20_06_16_1310.vpy" - --y4m | "C:\PROGRA~1\Hybrid\64bit\x264.exe" --preset superfast --pass 1 --bitrate 1500 --profile high --level 4.1 --direct auto --qcomp 0.5 --rc-lookahead 40 --aq-mode 0 --sar 16:15 --non-deterministic --range tv --stats "G:\TestTemp\TestFilm_20_06_16_1310_02.stats" --demuxer y4m  --input-range tv --fps 25/1 --output-depth 8 --output NUL -
in einer Eingabeaufforderung auf um zu sehen, ob da eventuell noch eine andere Fehlermeldung kommt. Mit dem Aufruf kann man auch testen, ob es eventuell geht wenn man Virenscanner&Co deaktiviert.

Cu Selur

Ps.: Fällt mir ein, das Problem könnte an der ff3dfilter.dll liegen, siehe: https://forum.selur.net/showthread.php?tid=732 (Das Ersetzen der .dll durch die von mir hochgeladene .dll sollte das Problem dann beheben.)
Reply
#3
Thumbs Up 
Danke, der Austausch der fft3dfilter.dll hat das Problem gelöst. Du hattest Recht, auch wenn es funktioniert lautet es "--demuxer y4m", war also nicht ursächlich.

Aber natürlich habe ich trotzdem vorher (mit der alten fft3dfilter.dll, Version 2.5.0.0) wie du vorgeschlagen hast das Vapoursynth Preview getestet. Der Test ist fehlgeschlagen, das Skript war folgendes:

# Imports
import os
import sys
import ctypes
Dllref = ctypes.windll.LoadLibrary("C:/Program Files/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll")
# Loading Support Files
Dllref = ctypes.windll.LoadLibrary("C:/Program Files/Hybrid/64bit/vsfilters/Support/OpenCL.dll")
import vapoursynth as vs
core = vs.get_core()
# Import scripts folder
scriptPath = 'C:/Program Files/Hybrid/64bit/vsscripts'
sys.path.append(os.path.abspath(scriptPath))
# Loading Plugins
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/GrainFilter/AddGrain/AddGrain.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/FFT3DFilter/fft3dfilter.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/DFTTest/DFTTest.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/EEDI3.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/ResizeFilter/nnedi3/vsznedi3.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/libmvtools.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/temporalsoften.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/scenechange.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/SourceFilter/LSmashSource/vslsmashsource.dll")
# Import scripts
import havsfunc
# Loading G:\TestFilm.mkv using LWLibavSource
clip = core.lsmas.LWLibavSource(source="G:/TestFilm.mkv", format="YUV420P8", cache=0)
# making sure input color matrix is set as unspec
clip = core.resize.Point(clip, matrix_in_s="unspec",range_s="limited")
# making sure frame rate is set to 25/1
clip = core.std.AssumeFPS(clip, fpsnum=25, fpsden=1)
# Setting color range to TV (limited) range.
clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
# setting field order to what QTGMC should assume
clip = core.std.SetFrameProp(clip=clip, prop="_FieldBased", intval=2)
# Deinterlacing using QTGMC
clip = havsfunc.QTGMC(Input=clip, Preset="Fast", TFF=True)
clip = clip[::2]
# adjusted resizing to achieve PAR 1:1 for preview (1)
clip = core.fmtc.resample(clip=clip, kernel="spline16", w=768, h=576, interlaced=False, interlacedd=False)
# adjusting output color from: YUV420P16 to YUV420P8 for x264Model (i420)
clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P8, range_s="limited")
# Output
clip.set_output()
Die Fehlermeldung war diese:

Failed to evaluate the script:
Python exception: No entry point found in C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/FFT3DFilter/fft3dfilter.dll

Traceback (most recent call last):
 File "src\cython\vapoursynth.pyx", line 1927, in vapoursynth.vpy_evaluateScript
 File "src\cython\vapoursynth.pyx", line 1928, in vapoursynth.vpy_evaluateScript
 File "G:\TestTemp\tempPreviewVapoursynthFile17_01_06_346.vpy", line 15, in <module>
   core.std.LoadPlugin(path="C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/FFT3DFilter/fft3dfilter.dll")
 File "src\cython\vapoursynth.pyx", line 1833, in vapoursynth.Function.__call__
vapoursynth.Error: No entry point found in C:/Program Files/Hybrid/64bit/vsfilters/DenoiseFilter/FFT3DFilter/fft3dfilter.dll
Falls gewünscht, kann ich gerne noch irgendwas bei mir testen (z. B. mit der alten fft3dfilter.dll), falls du genauer nachforschen willst. In Bezug auf Virenscanner oder ähnliches läuft bei mir bloß der Windows Defender, zusätzlich habe ich in der Richtung garnichts installiert. Auch sonst halte ich mein System für ziemlich 'standardmäßig', bewusst habe ich keine großen Änderungen am System vorgenommen, die das Ganze irgendwie beeinflußen könnten. Aber naja, so wirklich nachvollziehen kann man bei einem PC ja nicht, was da wie und warum so läuft oder eben auch nicht läuft.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)