Am Mittwoch 26 Mai 2010 03:11:22 schrieb David Haller: Hallo David,
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
Ok, mit anderen Worten, ich muss für mkv und mp4 unterschiedliche Dateien zur Verfügung stellen und kann beim Encodieren mit mencoder die Datei nicht so vorbereiten, dass sie für beides passt.
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 ;)
Siehe mein Script (PM, neue Version ist unterwegs), das fragt das zur Benamung ab. Quelle: test_digicam_640x480p_30.000fps_mjpg.avi umkodiert: test_digicam_640x480p_30.000fps_h264.mkv Allerdings Seems stream 0 codec frame rate differs from container frame rate: 60.00 (60/1) -> 29.97 (30000/1001) aus ffmpeg -i test_digicam test_digicam_640x480p_30.000fps_h264.mkv test_digicam.sh test_digicam_640x480p_30.000fps_mjpg.avi ab@client1:/videos_nfs/test_digicam> ffmpeg -i test_digicam_640x480p_30.000fps_h264.mkv FFmpeg version SVN-r22965, Copyright (c) 2000-2010 the FFmpeg developers built on Apr 28 2010 06:39:00 with gcc 4.3.2 [gcc-4_3-branch revision 141291] configuration: --shlibdir=/usr/lib64 --prefix=/usr --mandir=/usr/share/man -- libdir=/usr/lib64 --enable-shared --enable-libmp3lame --enable-libvorbis -- enable-libtheora --enable-libspeex --enable-libfaad --enable-libfaac --enable- nonfree --enable-libxvid --enable-postproc --enable-gpl --enable-x11grab -- enable-libschroedinger --enable-libdirac --enable-libgsm --enable-version3 -- enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable- libdc1394 --enable-pthreads libavutil 50.14. 0 / 50.14. 0 libavcodec 52.66. 0 / 52.66. 0 libavformat 52.61. 0 / 52.61. 0 libavdevice 52. 2. 0 / 52. 2. 0 libswscale 0.10. 0 / 0.10. 0 libpostproc 51. 2. 0 / 51. 2. 0 [matroska @ 0x64b0b0]Estimating duration from bitrate, this may be inaccurate Seems stream 0 codec frame rate differs from container frame rate: 60.00 (60/1) -> 29.97 (30000/1001) Input #0, matroska, from 'test_digicam_640x480p_30.000fps_h264.mkv': Duration: 00:00:32.54, start: 0.000000, bitrate: 128 kb/s Stream #0.0: Video: h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 29.97 tbr, 1k tbn, 60 tbc Stream #0.1: Audio: mp3, 44100 Hz, 1 channels, s16, 128 kb/s
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.
Nur Verpackung ist gut ;-) Die Verpackung macht mir ziemliche Probleme. Muxen ohne Fehlermeldung scheint eine Kunst zu sein, oder die Fehlermeldungen sind Müll, zB von ffmpeg.
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):
Klar, ich brauche auch MP4Box nicht unebdedingt, wenn es mit mkv klappt. Rückspulen ist nach wie vor am Hardware-Player nicht, das mich vermuen lasst, dass da irgendwas mit den Optionen nicht stimmt.
mplayer -dumpvideo -dumpfile /dev/stdout foo.avi | MP4Box -add - "$MP$FILE"
('-dumpfile -' geht nicht!, keine Ahnung ob MP4Box von stdin lesen kann).
Ich hoffe, dass ich es mit mkv hinbekomme, wäre mir viel lieber Matroska als Container zu haben, aber notfalls muss ich mp4 nehmen. Al -- 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