Ne, so meinte ich das nicht. ^^"
Ein Skript, dass automatisch die Tonspur streckt oder staucht, um sie mit dem Video zu synchronisieren.
Beiträge von djcj
-
-
'-async 1 ' hinter pulse und Huffyuv + .avi haben auch nicht geholfen. Habe versucht JACK zu installieren und über jack_capture aufzunehmen, aber irgendwie wollte es nicht laufen.
Ich denke ich versuch mal nachträglich den Ton zu resamplen bis er synchron ist und guck, wie das Ergebnis dann sein wird. Ich hatte mal ein AviSynth-Script mit dem das automatisch ging, aber das hab ich nicht mehr. Mal sehen ob ich das nochmal hin bekomm. -
Ich habe jetzt FFV1 als Videocodec benutzt und das Bild ist jetzt in Ordnung. Der Ton ist aber weiter asynchron.
Hier ein eineinhalb-minütiger Beispielclip, diesmal die unveränderte Originalausgabe: http://www.sendspace.com/file/ogj7f1
In diesem Fall hat der Ton eine Länge von 1:34 und das Video 1:32. Bei einer längeren Aufnahme wird die Differenz größer.Und falls es vielleicht hilfreich ist, noch die Ausgabe von arecord -l:
Code**** Liste der Hardware-Geräte (CAPTURE) ****Karte 0: NVidia [HDA NVidia], Gerät 0: ALC662 rev1 Analog [ALC662 rev1 Analog] Sub-Geräte: 1/1 Sub-Gerät #0: subdevice #0Karte 0: NVidia [HDA NVidia], Gerät 2: ALC662 rev1 Alt Analog [ALC662 rev1 Alt Analog] Sub-Geräte: 1/1 Sub-Gerät #0: subdevice #0
Und hier die Terminalausgabe bei einer Aufnahme:
Code
Alles anzeigen~ $ ffmpeg -f pulse -i default -f x11grab -s 862x512 -r 30 -i :0.0 -acodec copy -pix_fmt yuv420p -vcodec ffv1 out.mkv ffmpeg version 2.1.1-59251-g2fb9e77 Copyright (c) 2000-2013 the FFmpeg developers built on Dec 21 2013 01:42:41 with gcc 4.8 (Ubuntu/Linaro 4.8.1-10ubuntu9) configuration: --enable-gpl --enable-nonfree --enable-version3 --disable-ffplay --disable-ffprobe --disable-ffserver --enable-postproc --enable-libpulse --enable-x11grab --enable-libfdk-aac --enable-libvo-aacenc --enable-libaacplus --enable-libfaac --enable-libvorbis --enable-libmp3lame --enable-libx264 libavutil 52. 58.101 / 52. 58.101 libavcodec 55. 45.103 / 55. 45.103 libavformat 55. 22.100 / 55. 22.100 libavdevice 55. 5.102 / 55. 5.102 libavfilter 4. 0.100 / 4. 0.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 17.104 / 0. 17.104 libpostproc 52. 3.100 / 52. 3.100 Guessed Channel Layout for Input Stream #0.0 : stereo Input #0, pulse, from 'default': Duration: N/A, start: 0.001299, bitrate: 1536 kb/s Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s [x11grab @ 0x31742c0] device: :0.0 -> display: :0.0 x: 0 y: 0 width: 862 height: 512 [x11grab @ 0x31742c0] shared memory extension found Input #1, x11grab, from ':0.0': Duration: N/A, start: 1387627993.561614, bitrate: 423690 kb/s Stream #1:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 862x512, 423690 kb/s, 30 tbr, 1000k tbn, 30 tbc [swscaler @ 0x315c120] deprecated pixel format used, make sure you did set range correctly Output #0, matroska, to 'out.mkv': Metadata: encoder : Lavf55.22.100 Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv420p, 862x512, q=2-31, 200 kb/s, 1k tbn, 30 tbc Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, 1536 kb/s Stream mapping: Stream #1:0 -> #0:0 (rawvideo -> ffv1) Stream #0:0 -> #0:1 (copy) Press [q] to stop, [?] for help [swscaler @ 0x315c120] Warning: data is not aligned! This can lead to a speedloss frame= 91 fps= 30 q=0.0 Lsize= 12901kB time=00:00:03.69 bitrate=28634.2kbits/s video:12203kB audio:692kB subtitle:0 global headers:0kB muxing overhead 0.049187% ~ $
-
Okay, ist ein altes Topic, aber für manche sicher dennoch sehr interessant zu wissen, wie man das hinbekommt.
Die 32-Bit NeroAac-Tools brauchen natürlich 32-Bit Libs und die müssen manuell installiert werden.
Die Abhängigkeiten kommt man mit readelf -d neroAac* | egrep "NEEDED" heraus:Code
Alles anzeigen0x00000001 (NEEDED) Gemeinsame Biblothek [libstdc++.so.6] 0x00000001 (NEEDED) Gemeinsame Biblothek [libm.so.6] 0x00000001 (NEEDED) Gemeinsame Biblothek [libgcc_s.so.1] 0x00000001 (NEEDED) Gemeinsame Biblothek [libc.so.6] 0x00000001 (NEEDED) Gemeinsame Biblothek [libstdc++.so.6] 0x00000001 (NEEDED) Gemeinsame Biblothek [libm.so.6] 0x00000001 (NEEDED) Gemeinsame Biblothek [libgcc_s.so.1] 0x00000001 (NEEDED) Gemeinsame Biblothek [libc.so.6] 0x00000001 (NEEDED) Gemeinsame Biblothek [libstdc++.so.6] 0x00000001 (NEEDED) Gemeinsame Biblothek [libm.so.6] 0x00000001 (NEEDED) Gemeinsame Biblothek [libgcc_s.so.1] 0x00000001 (NEEDED) Gemeinsame Biblothek [libc.so.6]
Alle drei Binärdateien benötigen also libm.so.6, libgcc_s.so.1, libc.so.6 und libstdc++.so.6.
Also müssen die 32-Bit-Pakete die diese Dateien liefern nachinstalliert werden.
Bei Ubuntu kann man das zB auf http://packages.ubuntu.com/ nachsehen, und für 13.10 wären das libstdc++6:i386, libgcc1:i386 & libc6:i386.
Hier hätte ich auch ein Skript, dass automatisch neroAac lädt und ein Debian-Paket erstellt.PS: Unter FreeBSD (32/64 Bit) kann man NeroAAC für Linux über Ports installieren:
cd /usr/ports/audio/linux-neroaaccodec/ && make install clean
Die Installation von emulators/linux_base-f10 wird vorrausgesetzt, sofern das Paket nicht automatisch mit installiert wird.edit:
Hier habe ich ein Skript geschrieben, das mit Hilfe von debhelper ein ordentliches Debian-Paket erstellt:
https://github.com/darealshinji/neroaac-debianOder man installiert gleich das fdk-aac Frontend: sudo apt-get install aac-enc
-
Ich versuche ein Spiel in einem Fenster aufzunehmen (kein OpenGL). Dazu verwende ich folgenden Befehl für ffmpeg:
Codeffmpeg -f pulse -i default -f x11grab -s 862x512 -r 30 -i :0.0 -acodec copy -pix_fmt yuv420p -vcodec libx264 -crf 0 -preset ultrafast -threads 0 -y out.mkv
Das Problem: Der Ton ist länger als das Video. Das Video wird in korrekter Geschwindigkeit aufgenommen, der Ton aber anscheinend langsamer, was man auch hören kann. Und mit -f alsa wird garkein Ton aufgenommen, und -f alsa -i pulse ist im Ergebnis noch schlimmer als -f pulse. Und ich merke gerade, dass das Video auch flackert.
Vielleicht weiß ja jemand eine Lösung, wie ich Ton und Bild zusammen synchron aufnehmen kann. Ansonsten müsste ich mir überlegen wie ich den Ton im Nachhinein an die Videogeschwindigkeit anpasse.
OS: Mint 16
Kernel: x86_64 Linux 3.11.0-12-genericCode
Alles anzeigenffmpeg version 2.1.1-59251-g2fb9e77 Copyright (c) 2000-2013 the FFmpeg developers built on Dec 21 2013 01:42:41 with gcc 4.8 (Ubuntu/Linaro 4.8.1-10ubuntu9) configuration: --enable-gpl --enable-nonfree --enable-version3 --disable-ffplay --disable-ffprobe --disable-ffserver --enable-postproc --enable-libpulse --enable-x11grab --enable-libfdk-aac --enable-libvo-aacenc --enable-libaacplus --enable-libfaac --enable-libvorbis --enable-libmp3lame --enable-libx264 libavutil 52. 58.101 / 52. 58.101 libavcodec 55. 45.103 / 55. 45.103 libavformat 55. 22.100 / 55. 22.100 libavdevice 55. 5.102 / 55. 5.102 libavfilter 4. 0.100 / 4. 0.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 17.104 / 0. 17.104 libpostproc 52. 3.100 / 52. 3.100 Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... Use -h to get full help or, even better, run 'man ffmpeg'
-
Lol, hab den Titel korrigiert.
may24: Aktueller Snapshot von heute. Welches Release das genau ist weiß ich nicht, außer halt core:138. Sollte ich es vielleicht noch mal mit einer Stable-Version versuchen?
Nachtrag: Sowohl last als auch last-stable sind r2245 (zumindest steht die Nummer im Dateinamen). Wo bekomme ich denn den Quellcode von rev2348?
edit:
Jetzt bin ich verwirrt, das aktuelle Linux-Binary auf videolan.org ist r2358.edit2:
Wenn ich die letzte stable kompiliere dann geht ffms2. Allerdings kann ich die nur ohne lavf-Unterstützung kompilieren, sonst erscheint folgende Fehlermeldung:Code/usr/local/lib/libavcodec.a(libx264.o): In function `X264_init': /home/djcj/Downloads/ffmpeg-2.0.1/libavcodec/libx264.c:552: undefined reference to `x264_encoder_open_138' collect2: Fehler: ld gab 1 als Ende-Status zurück make: *** [x264] Fehler 1
edit3:
Schätze, ich hab das Problem entdeckt. Wenn ich die last-unstable ohne lavf-Unterstützung kompiliere funktioniert ffms. Keine Ahnung ob das ein Fehler im Quellcode ist, oder ob's an meinem System liegt.edit4:
Hab noch etwas merkwürdiges entdeckt: Wenn ich von arte.tv ein Video lade, kann x264 die MP4-Datei nicht über ffms indizieren. Wenn ich das Video aber nach MKV muxe kann x264 es verarbeiten. Ich vermute einfach mal dass es Bugs sind an denen ich nicht viel ändern kann. Wichtig war mir nur dass ffms läuft. -
Irgendwie will ffms nicht so richtig.
Hier ein Auszug:Code$ x264 --frames 25 -o test.mp4 dump.mp4 ffms [error]: could not find video track ] lavf [info]: 1280x720p 1:1 @ 0/0 fps (vfr)
Code$ x264 --frames 25 -o test.mp4 dump.mkvffms [error]: could not create video source lavf [info]: 1280x720p 1:1 @ 50/1 fps (vfr)
Interessant finde ich, dass wenn ich das Video nach Matroska muxe, die Fehlermeldung eine etwas andere ist.
ffms-Support ist aber mit dabei:
Code
Alles anzeigen$ x264 --help x264 core:138 Syntax: x264 [options] -o outfile infile Infile can be raw (in which case resolution is required), or YUV4MPEG (*.y4m), or Avisynth if compiled with support (yes). or libav* formats if compiled with lavf support (yes) or ffms support (yes). Outfile type is selected by filename: .264 -> Raw bytestream .mkv -> Matroska .flv -> Flash Video .mp4 -> MP4 if compiled with GPAC support (yes) Output bit depth: 8 (configured at compile time)
Was kann man da machen? Ich mein, lavf funzt, aber ffms wär auch nicht schlecht.
Programm ist selbst kompiliert (Linux). -
Hab ffmpeg mit Support für fdk-aac und libvo-aacenc kompiliert und jetzt funktioniert's.
-
Sorry für die dürftigen Infos.
Also...Ich benutze Ubuntu 13.04.
Ich habe Wine+AviSynth+avs2pipemod benutzt in Verbindung mit neroaacenc für Linux. Habe es jetzt auch mit -ignorelength versucht.Kommando: wine avs2pipemod -wav=16bit script.avs | neroaacenc -br 750000 -ignorelength -if - -of test.m4a
Script:
loadplugin("NicAudio.dll")
NicDTSSource("Audio.dts")Meldung:
vs2pipemod[info]: invoking ConvertAudioTo16bit() ...
avs2pipemod[info]: writing 6058.539 seconds of 48000 Hz, 6 channel audio.
ERROR: error while encoding frameseconds...94%]essed 89 seconds...
avs2pipemod[info]: finished, wrote 668.539 seconds [11%].
avs2pipemod[info]: total elapsed time is 91.822 sec.
avs2pipemod[error]: only wrote 32089856 of 290809856 samples.Mit fdk-aac und libvo komm ich irgendwie nicht ganz zurecht. Ich muss ffmpeg oder avconv defür verwenden, und ich muss die selbst kompilieren mit Unterstützung für diese Bibliotheken, ist das richtig?
Oder gibt es eine andere, einfacherer Methode die DTS-Tonspur nach AAC umzuwandeln?Nachtrag:
Folgenes Kommando funkitoniert ebenfalls nicht richtig: wine avs2pipemod -wav=16bit script.avs | wine ./neroaacenc -br 750000 -ignorelength -if - -of test.m4a
Produziert wird hier ebenfalls eine zu kurze Audiodatei. -
Hallo. Ich habe eine DTS-ES Tonspur (1500 kbps) und würde diese gerne nach AAC umwandeln (Surround) mit einer Zielbitrate von 750 kbps. FAAC scheint wohl bei 500 kbps limitiert zu sein (obwohl mir das Notfalls auch reicht) und Nero+AviSynth funzt irgendwie garnicht. Benutze Linux.
-
-
Selur: Ist die Frage an mich gerichtet? Ich bin nämlich Neuling, wenn es um AviSynth+Linux geht.
Das mit dem Encoden funktioniert ja jetzt auch bei mir. Nur eine Vorschau, so wie unter Windows mit MPC oder VirtualDubMod, die kriege ich noch nicht hin.
-
-
-
Wenn ich ein Video encoden möchte mittels diesen Befehl
erscheint folgendes:Coderaw [info]: 640x480p 0:0 @ 25/1 fps (cfr) x264 [info]: using cpu capabilities: MMX2 SSE2Fast FastShuffle SSEMisalign LZCNT x264 [info]: profile High, level 3.0 failed to load avisynth.dll
Auf http://akuvian.org/src/avisynth/avs2yuv/ steht nun folgender Hinweis:
ZitatRequires avisynth.dll and devil.dll somewhere in Wine's $PATH. Existing Avisynth installations will probably work.
Ich habe AviSynth 2.5.8 installiert und zusätzlich avisynth.dll und devil.dll in so ziemlich sämtliche wine-Unterverzeichnisse kopiert, auch in das Verzeichnis von avs2yuv.exe, aber er findet avisynth.dll immernoch nicht.Was mache ich falsch?
Ich benutze Kubuntu 13.04
-
Es gibt zwei große Neuerungen:
1. Das Script verwendet keine Globals mehr, also können die Funktionen jetzt mehrfach in einem Script verwendet werden.
2. timer_cut() funktioniert jetzt auch wenn start=0 und/oder end=framecount-1.Möglich wurde es durch Gavinos GRunT-Plugin und stickboys jdl-util:
http://forum.doom9.org/showthread.php?t=139337
http://avisynth.org/stickboy/jdl-util.avsi -
simpletransition(clip clip1, clip clip2, int overlap, int "mode", string "direction")
Benötigt den Transition-Filter von Shubin.
Erzeugt verschiedene Übergänge zwischen zwei Clips.
Der Ton wird wie bei Dissolve() gemischt.Beispiel:
loadplugin("transition.dll")
import("simpletransition.avs")
clip1 = colorbars().trim(0,99)
clip2 = clip1.greyscale().normalize(0.0)
simpletransition(clip1,clip2,50)
#simpletransition(clip1,clip2,50,2,"br2tl")
#simpletransition(clip1,clip2,25,mode=4,direction="1")overlap:
Anzahl der letzten Frames von Clip1 und der ersten Frames von Clip2 die sich überlappen.
Wie bei Dissolve() ist der resultierende Clip kürzer als Clip1+Clip2.mode:
0 - Clip2 drückt Clip1 weg.
1 - Clip2 schiebt sich über Clip1.
2 - Clip1 wird "ausradiert" und es bleibt Clip2 übrig.
3 - Kreisblende.
4 - Zoomblende.direction:
Bei mode=0: "l2r", "r2l", "t2b" & "b2t".
Bei mode=1 und mode=2: "l2r", "r2l", "t2b", "b2t", "tl2br", "br2tl", "tr2bl" & "bl2tr".
Erklärung: "l2r" - left to right, "b2t" - bottom to top, "tr2bl" - top right to bottom left, etc.
Bei mode=3 und mode=4: "0" - von Innen nach Außen, "1" - von Außen nach Innen.Möge es jemandem von Nutzen sein. ;D
PHP
Alles anzeigen# Written by djcj # Last modified: June 25th 2013 # # Requires: Transition filter for Avisynth 2.5 - beta - by Shubin # function res(clip clp, clip rclp, int width, int height) { rclp = bilinearresize(rclp, width, height) overlay(clp, rclp, clp.width/2-rclp.width/2, clp.height/2-rclp.height/2) } function simpletransition(clip clip1, clip clip2, int overlap, int "mode", string "direction") { mode = default(mode, 0) direction = default(direction, "l2r") dis = dissolve(clip1,clip2,overlap).trim(clip1.framecount-overlap, clip1.framecount) clp1 = clip1.trim(0, clip1.framecount-overlap-1) clp2 = clip2.trim(overlap, 0) clip1 = clip1.trim(clip1.framecount-overlap, 0) clip2 = clip2.trim(0, overlap-1) overlayclip = direction=="l2r" ? stackhorizontal(clip2,clip1) : \ direction=="r2l" ? stackhorizontal(clip1,clip2) : \ direction=="t2b" ? stackvertical(clip2,clip1) : \ direction=="b2t" ? stackvertical(clip1,clip2) : nop() transition0 = direction=="l2r" ? animate(0,overlap-1, "overlay", clip1,overlayclip, -clip1.width,0, clip1,overlayclip,0,0) : \ direction=="r2l" ? animate(0,overlap-1, "overlay", clip1,overlayclip, 0,0, clip1,overlayclip,-clip1.width,0) : \ direction=="t2b" ? animate(0,overlap-1, "overlay", clip1,overlayclip,0,-clip1.height, clip1,overlayclip,0,0) : \ direction=="b2t" ? animate(0,overlap-1, "overlay", clip1,overlayclip, 0,0, clip1,overlayclip,0,-clip1.height) : nop() transition1 = direction=="l2r" ? animate(clip2,0,overlap-1, "transition", clip1,"l",64, 0, clip1,"l",64,clip1.width) : \ direction=="r2l" ? animate(clip1,0,overlap-1, "transition", clip2,"l",64, clip1.width, clip2,"l",64,0) : \ direction=="t2b" ? animate(clip2,0,overlap-1, "transition", clip1,"l", 0,0,clip1.height, clip1,"l", 0,0,0) : \ direction=="b2t" ? animate(clip1,0,overlap-1, "transition", clip2,"l", 0,0, 0, clip2,"l", 0,0,clip1.height) : \ direction=="tl2br" ? animate(clip2,0,overlap-1, "transition", clip1,"l",32,0,clip1.height, clip1,"l",32,clip1.width,0) : \ direction=="br2tl" ? animate(clip1,0,overlap-1, "transition", clip2,"l",32, clip2.width,0, clip2,"l",32,0,clip2.height) : \ direction=="tr2bl" ? animate(clip1,0,overlap-1, "transition", clip2,"l",96, clip2.width,clip2.height, clip2,"l",96,0,0) : \ direction=="bl2tr" ? animate(clip2,0,overlap-1, "transition", clip1,"l",96,0, 0, clip1,"l",96,clip1.width,clip1.height) : nop() transition2 = direction=="l2r" ? animate(0,overlap-1, "overlay", clip1,clip2,-clip1.width, 0, clip1,clip2,0,0) : \ direction=="r2l" ? animate(0,overlap-1, "overlay", clip1,clip2, clip1.width, 0, clip1,clip2,0,0) : \ direction=="t2b" ? animate(0,overlap-1, "overlay", clip1,clip2, 0,-clip1.height, clip1,clip2,0,0) : \ direction=="b2t" ? animate(0,overlap-1, "overlay", clip1,clip2, 0, clip1.height, clip1,clip2,0,0) : \ direction=="tl2br" ? animate(0,overlap-1, "overlay", clip1,clip2,-clip1.width,-clip1.height, clip1,clip2,0,0) : \ direction=="br2tl" ? animate(0,overlap-1, "overlay", clip1,clip2, clip1.width, clip1.height, clip1,clip2,0,0) : \ direction=="tr2bl" ? animate(0,overlap-1, "overlay", clip1,clip2, clip1.width,-clip1.height, clip1,clip2,0,0) : \ direction=="bl2tr" ? animate(0,overlap-1, "overlay", clip1,clip2,-clip1.width, clip1.height, clip1,clip2,0,0) : nop() radius = int(sqrt( pow(clip1.width/2,2) + pow(clip1.height/2,2) )) transition3 = direction=="0" ? animate(clip1,0,overlap-1, "transition", clip2,"c",0, clip2,"c",radius) : \ direction=="1" ? animate(reverse(clip2),0,overlap-1, "transition", reverse(clip1),"c",0, reverse(clip1),"c",radius).reverse() : \ animate(clip1,0,overlap-1, "transition", clip2,"c",0, clip2,"c",radius) transition4 = direction=="0" ? animate(0,overlap-1, "res", clip1,clip2,4,4, clip1,clip2,clip2.width,clip2.height) : \ direction=="1" ? animate(0,overlap-1, "res", clip2,clip1,clip1.width,clip1.height, clip2,clip1,4,4) : \ animate(0,overlap-1, "res", clip1,clip2,4,4, clip1,clip2,clip2.width,clip2.height) return clp1++audiodubex(select(mode,transition0,transition1,transition2,transition3,transition4),dis)++clp2 }
-
BluRay- und AVCHD-Discs können doch Streams in den Formaten H264 und AVC enthalten, oder? Würde es nicht auch funktionieren eine DVD quasi in dieses Format umzuwandeln mitsamt Menü? Sicher müsste man natürlich die Buttons und alles manuel erstellen, aber klappen müsste es doch. Und was würde zB gegen eine 700-1000 mb große 576p-Niedrigbitraten-BD sprechen? Hauptsache moderne Player am PC spielen es ab.
-
Also ich persönlich halte das Problem auch noch für aktuell. Klar, für die meisten Filme sind Menüs unsinnig, aber zB für Bonus-Material wäre es ganz angenehm. Ich finds schade, dass sich in Sachen Menü und MKV anscheinend lange nichts getan hat (oder ich weiß nur nichts davon).
-
Habe es nicht hinbekommen das Skript ohne Globals zum laufen zu bekommen.
Aber um etwaige Konflikte mit anderen Skripten zu vermeiden, habe ich
alle Globals umbenannt nach timer_global_var.Habe Startbeitrag aktualisiert.