Utilizo xmedia recode, que usa ffmpeg, para convertir estos videos usando "copiar" video y "convertir" ac3 -> aac, con un contenedor mp4. Para la mayoría de los vídeos, esto funciona bien y es muy rápido. Sin embargo, algunos aparecen como "jpeg en movimiento" y, cuando los convierto, aparece un archivo pequeño con el audio y una pantalla en negro. En VLC aparecen como h264/ac3 en la información del códec.
Probé tencoder con ffmpeg y obtuve los mismos resultados. Sin embargo, si cambio el codificador del tencoder al mencoder, los videos salen bien. El problema es que tardan 30 minutos cada uno, mientras que la copia de ffmpeg en xmedia tarda 2 minutos. ¿Hay alguna manera de quitarles a estos videos su carácter de "jpeg en movimiento"?
Aquí está el registro:
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
Respuesta1
El problema
El problema es su uso de -map
. Estás diciendo ffmpeg
que mapeen los flujos 0:2
y 0:1
cuáles en esta entrada corresponden al aac
flujo de audio y al mjpeg
flujo de video.
Soluciones
Utilice la selección de transmisión predeterminada
Puede omitir las -map
opciones y confiar en las predeterminadas.selección de flujocomportamiento:
De forma predeterminada,
ffmpeg
incluye solo una secuencia de cada tipo (video, audio, subtítulo) presente en los archivos de entrada y los agrega a cada archivo de salida. Elige lo "mejor" de cada uno según los siguientes criterios:
- vídeo: la transmisión con la resolución más alta
- audio: la transmisión con más canales
- subtítulos: la primera secuencia de subtítulos
En el caso de que varias corrientes del mismo tipo tengan la misma tasa, se elige la corriente con el índice más bajo.
Utilice el mapeo adecuado
Si la selección de transmisión predeterminada no es aceptable para usted, deberá usar las -map
opciones correctas para cada entrada.
Un método mejor que seleccionar explícitamente una secuencia particular por número de índice es agregar un especificador de secuencia.
Ejemplos
Elija todas las transmisiones de video y todas las transmisiones de audio desde la primera (y única) entrada:
ffmpeg -i input0 -map 0:v -map 0:a … output
- Tenga en cuenta que
ffmpeg
comienza a contar desde 0.
- Tenga en cuenta que
Elija la primera secuencia de video de la segunda entrada y la tercera secuencia de audio de la primera entrada:
ffmpeg -i input0 -i input1 -map 1:v:0 -map 0:a:2 … output
Utilice un mapeo negativo para elegir todas las transmisiones desde la entrada 0, excepto las transmisiones de subtítulos:
ffmpeg -i input0 -map 0 -map -0:s … output
Ver también
Respuesta2
Abra el mkv en mkvmerge, verifique si tiene archivos adjuntos y, si los tiene, elimínelos, mux e intente convertir nuevamente. Los archivos adjuntos son lo único que he encontrado que hace que un mkv se muestre como "jpeg en movimiento" en la recodificación de Xmedia.