Screencast weiterverarbeiten

  • Hallo,

    ich habe hier ein paar Screencast von Videos erstellt, bei denen ich Probleme habe diese weiterzuverarbeiten. Einmal habe ich den Screencast mit Camtasia Studio 8 gemacht und einmal mit ffmpeg. In beiden Fällen liefert LWLLibav asynchrone und ffvideosource auf dem Kopf stehende Videos mit Grünstich. Beide Screencasts sind laut Mediainfo mit variabler Framerate, obwohl ich zumindest in ffmpeg mit "-framearate 25" konstante gesetzt hatte. Bei Camtasia geht leider nur 30fps zu setzen (Video ist 25), einen Punkt zu "konstant" hab ich nicht gefunden.

    Hier mal die Mediainfoausgaben der beiden Screencasts.

    Camtasia:

    Code
    ID                                       : 1Format                                   : tsc2Codec-ID                                 : D0Dauer                                    : 21minBitraten-Modus                           : variabelBitrate                                  : 30,5 MbpsBreite                                   : 860 PixelHöhe                                     : 652 PixelBildseitenverhältnis                     : 4:3Modus der Bildwiederholungsrate          : variabelBildwiederholungsrate                    : 30,000 FPSminimale Bildwiederholungsrate           : 15,000 FPSmaximale Bildwiederholungsrate           : 30,000 FPSBits/(Pixel*Frame)                       : 1.811Stream-Größe                             : 4,63 GiB (98%)Kodierungs-Datum                         : UTC 2016-02-28 12:08:12Tagging-Datum                            : UTC 2016-02-28 12:30:05

    ffmpeg

    Code
    ID                                       : 1Format                                   : AVCFormat/Info                              : Advanced Video CodecFormat-Profil                            : High 4:4:4 Predictive@L4.0Format-Einstellungen für CABAC           : NeinFormat-Einstellungen für ReFrames        : 1 frameCodec-ID                                 : V_MPEG4/ISO/AVCBreite                                   : 1 920 PixelHöhe                                     : 1 080 PixelBildseitenverhältnis                     : 16:9Modus der Bildwiederholungsrate          : variabelColorSpace                               : YUVChromaSubsampling                        : 4:4:4BitDepth/String                          : 8 bitsScantyp                                  : progressivverwendete Encoder-Bibliothek            : x264 core 148 r2638 7599210Kodierungseinstellungen                  : cabac=0 / ref=1 / deblock=0:0:0 / analyse=0:0 / me=dia / subme=0 / psy=0 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=0 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=0 / threads=6 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=0 / weightp=0 / keyint=250 / keyint_min=25 / scenecut=0 / intra_refresh=0 / rc=cqp / mbtree=0 / qp=0Default                                  : JaForced                                   : NeinDURATION                                 : 00:35:38.098000000

    ffmpeg CL:

    Code
    ffmpeg -f dshow -framerate 30 -i video="screen-capture-recorder":audio="virtual-audio-capturer" -vcodec libx264 -crf 0 -preset ultrafast -acodec pcm_s16le "output result file.mkv"

    (Bei Camtasia hatte ich den Screencast ca. auf das Playerfenster begrenzt, bei ffmpeg nicht - daher der Unterschied bei der Auflösung. Das sollte später in Avisynth korrigiert werden).

    Wie schon gesagt liefert ffms2 Ausgabe verkehrt herum mit Grünstich und LWLibav asynchrone. Die Asynchronität ist aber bei den Camtasiavideos nicht stark aber spürbar. Beim FFmpeg-Video deutlicher.

    Ich bin am überlegen die Screencasts mit ffmeg neu zu erstellen. Vielleicht mag ffms2 die Einstellungen nicht?

    _________________________

    Zitat

    Zieht ein Bienenschwarm aus, so wird er herrenlos, wenn nicht der Eigentümer ihn unverzüglich verfolgt oder wenn der Eigentümer die Verfolgung aufgibt.


    § 961 BGB [Eigentumsverlust bei Bienenschwärmen]

    :D

  • Wie öffnest Du die Videos denn in Avisynth?
    Gibst Du da als Parameter mit, dass Du eine bestimmte Framerate als cfr haben willst? (Ansonsten wird es asynchron wenn die Timecodes nicht mit verarbeitet werden,...)
    Gibst Du da als Parameter mit, welches ColorSampling vorliegt? (im ffms2 Fall hört es sich an, als ob der Farbraum nicht richtig erkannt wird)

  • Normalerweise hatte ich einfach das hier verwendet:

    Code
    LWLibavVideoSource("input",threads=1)
    Code
    FFVideoSource("input",threads=1)

    Hab das jetzt geändert in:

    Code
    LWLibavVideoSource("input.trec",threads=1,fpsnum=30000,fpsden=1001)
    Code
    FFVideoSource("output result file.mkv",threads=1,colorspace="yuy2",fpsnum=25)

    Jetzt sind die Sachen soweit ich das bisher sehen kann wieder synchron und ffms2 kann die Datei auch laden. Laut Mediainfo war aber der Farbraum beim FFmpeg-Screencast "YUV", das konnte ich aber nicht angeben. Es geht hier aber jeder mögliche Farbraum (YV12, YUY2, RGB24, RGB32).

    Zitat

    Gibst Du da als Parameter mit, dass Du eine bestimmte Framerate als cfr haben willst?

    Ich vermute mal mit fpsnum/fpsden hat sich das erledigt. Sowas hatte ich bisher nie gebraucht. Ich habe hier immer die internen FPS-Filter genutzt. Ein spezieller Parameter wie sync_audio bei AssumeFPS ist hier aber nicht nötig, oder (ich hab bisher keine Video komplett angesehen, sondern nur die mir aufgefallenen Problemstellen, da sah erstmal alles ok aus)?

    Komisch ist dennoch, dass FFmpeg dden Screencast mit einer variablen Framerate und einer krummen dazu erstellt. Besser wäre es doch hier gleich cfr und genau 25 zu verwenden. Ich finde da jetzt aber keine andere Möglichkeit als "-framerate 25" anzugeben.

    _________________________

    Zitat

    Zieht ein Bienenschwarm aus, so wird er herrenlos, wenn nicht der Eigentümer ihn unverzüglich verfolgt oder wenn der Eigentümer die Verfolgung aufgibt.


    § 961 BGB [Eigentumsverlust bei Bienenschwärmen]

    :D

    Einmal editiert, zuletzt von Nel-son (3. April 2016 um 15:09)


  • Komisch ist dennoch, dass FFmpeg dden Screencast mit einer variablen Framerate und einer krummen dazu erstellt. Besser wäre es doch hier gleich cfr und genau 25 zu verwenden. Ich finde da jetzt aber keine andere Möglichkeit als "-framerate 25" anzugeben.

    Das geht schon, dass man ffmpeg auf ne konstante Framerate zwingt ( RTFM ;) ), aber anstatt dass du dich durch die FFMPEG Anleitung quälst, probier erstmal das neue OBS Studio (https://obsproject.com/) aus.

    Zwar noch recht frisch, dass ist aber im Grunde ein GUI Wrapper um ffmpeg, fürs Streamen und local aufnehmen. Muss man sich auch rein arbeiten, aber fürs spätere Aufnehmen dann wesentlich bequemer.

  • Zitat

    Laut Mediainfo war aber der Farbraum beim FFmpeg-Screencast "YUV", das konnte ich aber nicht angeben. Es geht hier aber jeder mögliche Farbraum (YV12, YUY2, RGB24, RGB32).


    YV12 und YUY2 sind beide YUV Farbräume und unterscheiden sich nur im Color Sampling welches auch von MediaInfo angegeben wird.
    Yv12 = 4:2:0
    YUY2 = 4:2:2

  • Habe hier auch eine Screencast Aufnahme mit dem Format-Profil: High 4:4:4 Predictive@L3.0

    Siehe MediaInfo Log: http://img.xrmb2.net/images/120856.png (Achtung großes Bild)

    Code
    LWLibavVideoSource("FFMpeg.Screencast.Test.REC.mkv")


    Im Automatik Modus erkennt L-SMASH-Works folgenden PixelType:
    [Blockierte Grafik: http://img.xrmb2.net/images/114952.png]

    Probiere ich die Manuelle PixelType Zuweisung per L-SMASH-Works aus, bekomme ich eine Fehlermeldung...

    Code
    LWLibavVideoSource("FFMpeg.Screencast.Test.REC.mkv[size=18][COLOR=#0000ff][B]"[/B][/COLOR][/SIZE],pixel_type="YV24")

    Ist YV24 überhaupt korrekt für High 4:4:4 Predictive ??

    Einmal editiert, zuletzt von H264x (6. April 2016 um 21:08)

  • YV24 ist 4:4:4 YUV, also: ja, ist korrekt.

    Probiere ich die Manuelle PixelType Zuweisung per L-SMASH-Works aus


    Laut welcher Dokumentation sollte LWLibavVideoSource() die besitzen? Ich kenne nur "format". Siehe README, die meist beiliegt.

  • Laut welcher Dokumentation sollte LWLibavVideoSource() die besitzen? Ich kenne nur "format".
    Siehe README, die meist beiliegt.

    Das war geraten!
    Hab gedacht man könnte die Scripte untereinnander abändern ;)
    z.B. Als Vorlage diente...

    Code
    AviSource("Test.avi[size=18][COLOR=#0000ff][B]"[/B][/COLOR][/SIZE],pixel_type="YV12")

    Habe nun den Befehl mit "format" getauscht, trozdem funktioniert die Manuelle PixelType Zuweisung mit L-SMASH nicht :(

    Code
    LWLibavVideoSource("FFMpeg.Screencast.Test.REC.mkv[size=18][COLOR=#0000ff][B]"[/B][/COLOR][/SIZE],format="YV24")

    Als Fehlermeldung bekomme ich: Script error expected a, or
    Was mache ich falsch?

    2 Mal editiert, zuletzt von H264x (4. April 2016 um 14:39)

  • Du hast ein Anführungszeichen nach dem Dateinamen vergessen.

    Nebenbei macht "YUV444P16" nicht viel Sinn, wenn Du nicht in 16 Bit weiterverarbeiten möchtest. Die Quelle hat eh nur 8 Bit.

  • Code
    FFVideoSource("output result file.mkv",threads=1,colorspace="yuy2",fpsnum=25)

    Was bedeutet eigentlich die Funktion: threads=1 ?
    Hab einen Laptop Mobile i7 CPU, der 4 Cores und 8 Threads besitzt.
    Sollte ich ihm dann Logischerweise, die vollen 8 Threads in diesem Beispiel AviSynth Script zuweisen?

    Ich hatte vor kurzem folgendes Problem als ich dieses Beispiel Video hier öffnen wollte...

    Code
    FFVideoSource("C:\Videos\BM Test Aufnahme 20160227 MJPG.avi")

    Die Automatische Erkennung von FFMS2 schlug fehl,
    da das Video komplett in Grüner Frabe und auf dem Kopf gestanden hat ;)

    Nach der Script Korrektur stimmte wieder alles :)

    Code
    FFVideoSource("C:\Videos\BM Test Aufnahme 20160227 MJPG.avi",colorspace="YUY2",fpsnum=25)

    Die Framerate + ColorSpace inkl. ChromaSubsampling,
    musste ich in diesem Beispiel manuell zuordnen,
    da sie wohl von FFMS2 nicht "automatisch" erkannt wurden.

    In der Gegenprobe mit L-SMASH-Works, funktionierte die Automatische Erkennung auf Anhieb!

    Code
    LWLibavVideoSource("C:\Videos\BM Test Aufnahme 20160227 MJPG.avi")

    In diesem Fall wurde die Framerate + ColorSpace inkl. ChromaSubsampling von L-SMASH-Works:
    automatisch, zuverlässig und korrekt erkannt :)

  • Was bedeutet eigentlich die Funktion: threads=1 ?

    Laut Dokumentation ;) bedeutet das, dass nur ein Decoder-Thread verwendet wird. Mehrere Threads wären zwar etwas schneller, aber es wäre manchmal etwas riskant, mehrere Threads decodieren zu lassen, weil die beim Überspringen von Frames, die von anderen Threads decodiert werden, bei bestimmten Containern (v.a. TS) und bestimmten Inhalten (v.a. PAFF-interlaced AVC) nicht immer an der richtigen Stelle landen. Besonders schlimm war das, als FFMS2 noch den Haali Media Splitter benutzte.

    Aber auch ein Decoder-Thread ist schon sehr schnell. Deutlich schneller als der nachfolgende Encoder. Vielleicht auch schneller als die gesamte Filtersequenz dazwischen. Zum Flaschenhals sollte der Decoder also eigentlich nicht werden, nur weil er lediglich einen Thread verwendet.

  • Danke für die Erklärung :)
    Wenn man die Funktion erst gar nicht angibt, dann müsste ja der "Auto Thread Modus" aktiv sein?
    Unter XP Zeiten waren die Scripte noch ohne Thread Zuweisung.
    Muss ich mir mal einen neuen Merkzettel für die AviSynth Nutzung unter Windows 7 mit 64-Bit schreiben:

    Code
    Durch das Manuelle setzen von "[B]threads=1[/B]" wird der Auto Modus verhindert! Dadurch wird das Fehler Riskio gemindert.

    Dann denke ich mal, gillt die Thread setzen Regel auch für alle weiteren "xSource" Quellen wie z.B.

    AviSource("inputVideo",threads=1)
    FFVideoSource("inputVideo",threads=1)
    LWLibavVideoSource("inputVideo",threads=1)

    usw...

  • Nicht jede *Source-Funktion hat überhaupt den Parameter 'threads'. AviSource hat ihn beispielsweise nicht, DirectShowSource auch nicht. FFVideoSource stellt einen bereit, und LwLibavVideoSource ebenso, weil beide libavcodec als Decoder verwenden, und bei dem lässt sich das Threading steuern. Das ist keine AviSynth-weite Funktionalität, sondern für jeden Source-Filter einzeln vorhanden oder nicht.

  • Ich hab jetzt erneut ein paar Screencasts gemacht, diesmal nur mit FFmpeg. Mir sind jetzt komische Ruckler in langsamen Bewegungen aufgefallen, z. B. wenn die Kamera ran- oder rauszoomt oder bei langsamen Kamerabewegungen über Landschaften. Ob die bei meinen älteren Screencasts auch da waren weiß ich nicht. Im Originalvideo ruckelt das Bild an den Stellen auch, aber deutlich weniger. Die FFmpeg-CLI heißt:

    Zitat

    ffmpeg -f dshow -framerate 25 -vsync 1 -i video="screen-capture-recorder":audio="virtual-audio-capturer" -vcodec libx264 -crf 0 -preset ultrafast -acodec pcm_s16le "output.mkv"

    Manchmal kam eine Meldung, die ich derzeit nicht reproduzieren kann. Da wurde irgendeine Buffermeldung hochgezählt, d.h. es wurde angezeigt wie oft sie wiederholt wurde. Dann das Fenster beendet und neu gestartet und es lief ohne diese Meldung. Keine Ahnung was das sollte.

    Woran kann es liegen, dass FFmpeg hier scheinbar Ruckler "verstärkt"? Ich hatte keine Prozesse im Hintergrund laufen. Evtl. liegt es an Aero unter Windows 7?

    _________________________

    Zitat

    Zieht ein Bienenschwarm aus, so wird er herrenlos, wenn nicht der Eigentümer ihn unverzüglich verfolgt oder wenn der Eigentümer die Verfolgung aufgibt.


    § 961 BGB [Eigentumsverlust bei Bienenschwärmen]

    :D

  • Ich hab jetzt erneut ein paar Screencasts gemacht, diesmal nur mit FFmpeg. Mir sind jetzt komische Ruckler in langsamen Bewegungen aufgefallen, z. B. wenn die Kamera ran- oder rauszoomt oder bei langsamen Kamerabewegungen über Landschaften. Ob die bei meinen älteren Screencasts auch da waren weiß ich nicht. Im Originalvideo ruckelt das Bild an den Stellen auch, aber deutlich weniger.

    Wird denn das Video als Vollbild oder im Fenster abgespielt?

    Wie sieht es denn aus, wenn du mit 60 oder 30fps aufnimmst?
    (wenn der Monitor mit 60hz läuft - du nimmst ja auf, was der Monitor anzeigt und nicht das Video ansich)

    Code
    ffmpeg -f dshow -framerate 60 -threads 0 -thread_queue_size 512 -i video="screen-capture-recorder":audio="virtual-audio-capturer" -vcodec libx264 -preset ultrafast -x264opts crf=0:force-cfr=1:weightp=0:stitchable=1 -acodec pcm_s16le -vsync 1 -threads 0 "output.mkv"
    Code
    ffmpeg -f dshow -framerate 30 -threads 0 -thread_queue_size 512 -i video="screen-capture-recorder":audio="virtual-audio-capturer" -vcodec libx264 -preset ultrafast -x264opts crf=0:force-cfr=1:weightp=0:stitchable=1 -acodec pcm_s16le -vsync 1 -threads 0 "output.mkv"
  • Richtig, an die Bildwiederholrate des Monitors hatte ich nicht gedacht. Ich hab mich an den 25fps des Videos orientiert. Mit 30fps sieht es etwas besser aus, mit 60fps nimmt er aber nichts auf. Hier kommt

    Zitat

    [dshow @ 012408a0] Could not set video options
    video=screen-capture-recorder:audio=virtual-audio-capturer: Input/output error

    Das kommt auch schon bei 50fps.

    _________________________

    Zitat

    Zieht ein Bienenschwarm aus, so wird er herrenlos, wenn nicht der Eigentümer ihn unverzüglich verfolgt oder wenn der Eigentümer die Verfolgung aufgibt.


    § 961 BGB [Eigentumsverlust bei Bienenschwärmen]

    :D

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!