Mailinglist Archive: opensuse-de (917 mails)

< Previous Next >
Re: Verständnisfrage mp4 mkv / MP4Box mkvmerge
  • From: Al Bogner <suse-linux@xxxxxxxxxxxxxxxxxxxx>
  • Date: Wed, 26 May 2010 09:00:24 +0200
  • Message-id: <201005260900.24522.suse-linux@xxxxxxxxxxxxxxxxxxxx>
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@xxxxxxxxxxxx
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+help@xxxxxxxxxxxx

< Previous Next >