Hallo, Am Mon, 24 Mai 2010, Al Bogner schrieb:
Am Montag 24 Mai 2010 16:41:37 schrieb David Haller:
Am Mon, 24 Mai 2010, Al Bogner schrieb: [..]
mencoder -ovc x264 -x264encopts qp=28:threads=auto:pass=2 -ofps "$FRAMERATE" \ -vf yadif=0,softskip,harddup \ -vf unsharp=l:5x5:0.9:c.5x5:0.1 \ -sws 9 -nosound -of rawvideo -o "$X264FILE" "$AVIFILE"
^^^^^^^^^^^^ Das ist dein Fehler, denke ich.
Du schreibst nen rohen Videostrom, kein AVI. Laß -of weg oder nimm '-of avi' was der default ist.
Jetzt mag MP4Box nicht mehr, aber mkv ist synchron.
Was ich so recherchiert habe, erwartet MP4box rawvideo, aber es soll eine Option für avi geben, die ich aber nicht gefunden habe.
Das Problem ist "Cannot find H264 start code".
$AVIFILE ist Original von der Digicam.
Zur Not (s.u.) kannst du aus dem .avi (dem von mencoder) auch nachträglich noch das "rohe" H.264 extrahieren: mplayer -dumpvideo -dumpfile foo.h264 foo.avi
Aus dem Script:
FRAMERATE=`exiftool -q -q -s -s -s -VideoFrameRate "$AVIFILE"`
mplayer -vo null -vc dummy -af resample=44100 -ao pcm:waveheader "$AVIFILE" &
mencoder -ovc x264 -x264encopts qp=28:threads=auto:pass=1 -ofps "$FRAMERATE" \ -vf yadif=0,softskip,harddup \ -vf unsharp=l:5x5:0.9:c:5x5:0.1 \ -sws 9 -nosound -o /dev/null $AVIFILE
lame --quiet --preset standard audiodump.wav "$MP3FILE" &
mencoder -ovc x264 -x264encopts qp=28:threads=auto:pass=2 -ofps "$FRAMERATE" \ -vf yadif=0,softskip,harddup \ -vf unsharp=l:5x5:0.9:c.5x5:0.1 \ -sws 9 -nosound -o "$X264FILE" "$AVIFILE"
mkvmerge -o "$MKVFILE" "$X264FILE" "$MP3FILE"
MP4Box -fps "$FRAMERATE" -add "$MP3FILE" "$MP$FILE" MP4Box -fps "$FRAMERATE" -add "$X264FILE" "$MP$FILE"
Verwende mkvmerge zum muxen. Ich vermute dein Problem lag daran, daß du das rohen H.264 an mkvmerge verfüttert hast, und _dem_ fehlt eben die FPS-Angabe. Im .avi (von mencoder) steckt diese aber drinnen und sollte von mkvmerge auch übernommen werden. Wenn ich meine 08/15 mkvs abspiele sagt mir mplayer das auch, z.B.: VIDEO: [FMP4] 684x384 24bpp 25.000 fps 0.0 kbps ( 0.0 kbyte/s) Ebenso mediainfo (heute frisch noch auf der ollen Kiste gebacken ;), und das schaut auch noch rein in die "Puppe" und guckt, was der Stream für ne Bitrate hat: ==== Bit rate : 720 Kbps Width : 684 pixels Height : 384 pixels Display aspect ratio : 16:9 Frame rate : 25.000 fps ====
Muxen zu ./test_digicam.x264.mkv
mkvmerge v3.3.0 ('Language') '/videos_nfs/test_digicam/test_digicam.x264': Der AVI-Demultiplexer. Das Öffnen der Datei kann, abhängig von der Größe, eine Weile dauern. '/videos_nfs/test_digicam/test_digicam.avi.mp3': Der MP2/MP3-Demultiplexer wird benutzt. '/videos_nfs/test_digicam/test_digicam.x264' Track 0: Informationen über das Seitenverhältnis wurden aus den MPEG-4 layer 10 (AVC) Videodaten extrahiert. Die Anzeigeabmessungen wurden auf 640/480 gesetzt. '/videos_nfs/test_digicam/test_digicam.x264' Track 0: Das MPEG-4 Teil 10 ES- Video-Ausgabemodul wird benutzt. '/videos_nfs/test_digicam/test_digicam.avi.mp3' Track 0: Das MPEG-Audio- Ausgabemodul wird benutzt. Die Datei './test_digicam.x264.mkv' wurde zum Schreiben geöffnet. Fortschritt: 100% Die Cueeinträge (der Index) werden geschrieben... Das Muxen dauerte 3 Sekunden.
Hier wäre jetzt interessant, was mediainfo/mplayer bzgl. FPS zum mkv sagen ;) Die sollten so nämlich stimmen, da "per Container" erhalten ;)
Muxen zu ./test_digicam.x264.mp4
MP3 import - sample rate 44100 - MPEG-1 audio - 1 channel Saving to : 0.500 secs Interleaving Error: I/O Error Cannot find H264 start code Error importing /videos_nfs/test_digicam/test_digicam.x264: BitStream Not Compliant
Da brauchst du wohl das rohe, da kannst du mkvmerge auch weglassen, wenn du das Video nicht eh in beiden Containern haben willst. Matroska/MP4 sind ja nur die Verpackung der div. Streams.
Diese Sytnax passt also vermutlich noch nicht. Ich hätte das gerne alternativ im Script, falls ich das einmal brauche.
MP4Box -fps "$FRAMERATE" -add "$MP3FILE" "$MP$FILE" MP4Box -fps "$FRAMERATE" -add "$X264FILE" "$MP$FILE"
Parameter '-of' mit Optionen mkv -> mkvmerge und mencoder-output als .avi mp4 -> MP4Box und mencoder-output als raw Oder alternativ mencoder immer gleich kodieren lassen und für MP4Box ggfs. die Rohdaten extrahieren. Evtl. ginge das sogar per Pipe ;) Zumindest die mplayer Seite geht (kenne MP4Box nicht): mplayer -dumpvideo -dumpfile /dev/stdout foo.avi | MP4Box -add - "$MP$FILE" ('-dumpfile -' geht nicht!, keine Ahnung ob MP4Box von stdin lesen kann). HTH, -dnh -- 284: Nur der Inhalt zählt! Ich war zu blöd, meinen HTML-Editor richtig zu bedienen. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org