
Ich verwende xmedia recode, das ffmpeg verwendet, um diese Videos zu konvertieren, indem ich das Video „kopiere“ und „ac3 -> aac“ mit einem mp4-Container „konvertiere“. Bei den meisten Videos funktioniert das gut und ist wirklich schnell. Einige werden jedoch als „Motion JPEG“ angezeigt, und wenn ich sie konvertiere, erhalte ich eine kleine Datei mit dem Audio und einem schwarzen Bildschirm. In VLC werden sie unter den Codec-Informationen als h264/ac3 angezeigt.
Ich habe Tencoder mit FFMPEG ausprobiert und die gleichen Ergebnisse erhalten. Wenn ich jedoch den Encoder von Tencoder auf Mencoder umstelle, sind die Videos einwandfrei. Das Problem ist, dass sie jeweils 30 Minuten dauern, während das Kopieren mit FFMPEG in Xmedia 2 Minuten dauert. Gibt es eine Möglichkeit, diese Videos von ihrem „Motion JPEG“-Charakter zu befreien?
Hier ist das Protokoll:
Encoder 1 log
Encoder 1 command lines:
-y -itsoffset 0 -threads 8 -i "Z:\Downloads\3. Convert\test.mkv" -c:v libx264 -crf 21 -level 41 -f mp4 -map 0:2 -map 0:1 -strict experimental -c:a aac -ab 320k -af aresample=resampler=soxr -ar 44100 -ac 2 "Z:\Downloads\3. Convert\test.mp4"
Encoder 1 console outputs:
ffmpeg version N-71403-g415f1fa Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.2 (GCC)
configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
libavutil 54. 22.101 / 54. 22.101
libavcodec 56. 34.100 / 56. 34.100
libavformat 56. 30.100 / 56. 30.100
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 13.101 / 5. 13.101
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, matroska,webm, from 'Z:\Downloads\3. Convert\test.mkv':
Metadata:
encoder : libebml v1.3.0 + libmatroska v1.4.1
creation_time : 2015-01-16 07:42:24
Duration: 00:20:18.47, start: 0.083000, bitrate: 4818 kb/s
Stream #0:0: Video: h264 (High), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 2k tbc (default)
Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp (default)
Stream #0:2: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 340x340 [SAR 300:300 DAR 1:1], 90k tbr, 90k tbn, 90k tbc
Metadata:
filename : cover.jpeg
mimetype : image/jpeg
[mp4 @ 00000000027008e0] Frame rate very high for a muxer not efficiently supporting it.
Please consider specifying a lower framerate, a different muxer or -vsync 2
No pixel format specified, yuvj444p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[libx264 @ 0000000003d4f020] using SAR=1/1
[libx264 @ 0000000003d4f020] MB rate (43560000) > level limit (245760)
[libx264 @ 0000000003d4f020] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX XOP FMA4 FMA3 LZCNT BMI1
[libx264 @ 0000000003d4f020] profile High 4:4:4 Predictive, level 4.1, 4:4:4 8-bit
[libx264 @ 0000000003d4f020] 264 - core 146 r2538 121396c - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=21.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'Z:\Downloads\3. Convert\test.mp4':
Metadata:
encoder : Lavf56.30.100
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj444p(pc), 340x340 [SAR 300:300 DAR 1:1], q=-1--1, 90k fps, 90k tbn, 90k tbc
Metadata:
filename : cover.jpeg
mimetype : image/jpeg
encoder : Lavc56.34.100 libx264
Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 320 kb/s (default)
Metadata:
encoder : Lavc56.34.100 aac
Stream mapping:
Stream #0:2 -> #0:0 (mjpeg (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
frame= 1 fps=0.0 q=31.0 Lsize= 47681kB time=00:20:18.40 bitrate= 320.6kbits/s
video:10kB audio:47281kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.825254%
[libx264 @ 0000000003d4f020] frame I:1 Avg QP:31.31 size: 9546
[libx264 @ 0000000003d4f020] mb I I16..4: 7.0% 77.1% 15.9%
[libx264 @ 0000000003d4f020] 8x8 transform intra:77.1%
[libx264 @ 0000000003d4f020] coded y,u,v intra: 48.1% 11.9% 10.3%
[libx264 @ 0000000003d4f020] i16 v,h,dc,p: 12% 21% 21% 47%
[libx264 @ 0000000003d4f020] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 32% 9% 32% 3% 4% 5% 4% 5% 6%
[libx264 @ 0000000003d4f020] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 9% 21% 8% 7% 10% 6% 10% 6%
[libx264 @ 0000000003d4f020] kb/s:6873120.00
Antwort1
Das Problem
Das Problem ist Ihre Verwendung von -map
. Sie sagen, ffmpeg
dass Streams zugeordnet werden sollen 0:2
und 0:1
welche in dieser Eingabe dem aac
Audiostream und dem mjpeg
Videostream entsprechen.
Lösungen
Verwenden Sie die Standard-Stream-Auswahl
Sie können die -map
Optionen weglassen und sich auf die Standardeinstellung verlassen.StreamauswahlVerhalten:
Standardmäßig
ffmpeg
wird nur ein Stream jedes Typs (Video, Audio, Untertitel) in die Eingabedateien aufgenommen und zu jeder Ausgabedatei hinzugefügt. Basierend auf den folgenden Kriterien wird der „beste“ Stream ausgewählt:
- Video – der Stream mit der höchsten Auflösung
- Audio – der Stream mit den meisten Kanälen
- Untertitel – der erste Untertitel-Stream
Falls mehrere Streams desselben Typs die gleiche Bewertung aufweisen, wird der Stream mit dem niedrigsten Index ausgewählt.
Verwenden Sie die richtige Zuordnung
Wenn die Standard-Stream-Auswahl für Sie nicht akzeptabel ist, müssen Sie -map
für jeden Eingang die richtigen Optionen verwenden.
Eine bessere Methode als die explizite Auswahl eines bestimmten Streams anhand der Indexnummer ist das Hinzufügen eines Stream-Spezifizierers.
Beispiele
Wählen Sie alle Video-Streams und alle Audio-Streams vom ersten (und einzigen) Eingang aus:
ffmpeg -i input0 -map 0:v -map 0:a … output
- Beachten Sie, dass
ffmpeg
die Zählung bei 0 beginnt.
- Beachten Sie, dass
Wählen Sie den ersten Videostream vom zweiten Eingang und den dritten Audiostream vom ersten Eingang:
ffmpeg -i input0 -i input1 -map 1:v:0 -map 0:a:2 … output
Verwenden Sie eine negative Zuordnung, um alle Streams aus Eingabe 0 außer Untertitel-Streams auszuwählen:
ffmpeg -i input0 -map 0 -map -0:s … output
Siehe auch
Antwort2
Öffnen Sie die MKV-Datei in MKVMerge, prüfen Sie, ob Anhänge vorhanden sind, und entfernen Sie diese, wenn ja, muxen Sie sie und versuchen Sie die Konvertierung erneut. Anhänge sind meiner Erfahrung nach das Einzige, was dazu führt, dass eine MKV-Datei in Xmedia Recode als „Motion JPEG“ angezeigt wird.