
Cuando uso FFMPEG para convertir un video de MP4 a M3U8, usando el siguiente comando,
ffmpeg -i op.mp4 -b:v 128k -flags -global_header -map 0:0 -map 0:1 -f segment -segment_time 4 -segment_list_size 0 -segment_list op.m3u8 -segment_format mpegts op%05d.ts
Recibo la siguiente advertencia:
Non-monotonous DTS in output stream 0:1; previous: 347527, current: 346508; changing to 347528. This may result in incorrect timestamps in the output file.
Se genera el M3U8, pero solo aparece audio en el reproductor Quicktime.
Tanto el Sample MP4 como el M3U8 están disponiblesaquí
Entonces me gustaría saber
Razón detrás de este error. ¿Es un mp4 corrupto o un problema durante la conversión? El m3u8 se puede reproducir, no se puede reproducir correctamente en Quicktime. Solo aparece audio, no video.
¿Cómo puedo solucionar esto?
Salida completa de la consola FFMPEG:
ffmpeg version git-2013-06-06-c51654f Copyright (c) 2000-2013 the FFmpeg developers
built on Jun 6 2013 12:54:24 with gcc 4.6.3 (GCC) 20120306 (Red Hat 4.6.3-2)
configuration: --prefix=/root/ffmpeg_build --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --bindir=/root/bin --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264
libavutil 52. 35.100 / 52. 35.100
libavcodec 55. 15.100 / 55. 15.100
libavformat 55. 8.102 / 55. 8.102
libavdevice 55. 2.100 / 55. 2.100
libavfilter 3. 75.101 / 3. 75.101
libswscale 2. 3.100 / 2. 3.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'op.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.8.102
Duration: 00:00:06.00, start: 0.010000, bitrate: 679 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 640x364 [SAR 1:1 DAR 160:91], 590 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 130 kb/s
Metadata:
handler_name : SoundHandler
[segment @ 0x32e1d60] Codec for stream 0 does not use global headers but container format requires global headers
[segment @ 0x32e1d60] Codec for stream 1 does not use global headers but container format requires global headers
Output #0, segment, to 'op%05d.ts':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.8.102
Stream #0:0(eng): Video: mpeg2video, yuv420p, 640x364 [SAR 1:1 DAR 160:91], q=2-31, 128 kb/s, 90k tbn, 25 tbc
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: mp2, 44100 Hz, stereo, s16, 128 kb/s
Metadata:
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> mpeg2video)
Stream #0:1 -> #0:1 (aac -> mp2)
Press [q] to stop, [?] for help
[segment @ 0x32e1d60] Non-monotonous DTS in output stream 0:1; previous: 347527, current: 346508; changing to 347528. This may result in incorrect timestamps in the output file.
frame= 109 fps=0.0 q=31.0 size=N/A time=00:00:04.29 bitrate=N/A dup=14 drop=0 frame= 151 fps=0.0 q=24.8 Lsize=N/A time=00:00:06.00 bitrate=N/A dup=14 drop=0
video:350kB audio:96kB subtitle:0 global headers:0kB muxing overhead -100.004823%
Con las opciones vsync y async, el error que aparece es "El códec para la secuencia 0 no usa encabezados globales pero el formato del contenedor requiere encabezados globales". Aquí está la salida de la consola:
ffmpeg -i op.mp4 -b:v 128k -flags -global_header -map 0:0 -map 0:1 -f segment -segment_time 4 -segment_list_size 0 -segment_list nop.m3u8 -segment_format mpegts nop%05d.ts
ffmpeg version git-2013-06-06-c51654f Copyright (c) 2000-2013 the FFmpeg developers
built on Jun 6 2013 12:54:24 with gcc 4.6.3 (GCC) 20120306 (Red Hat 4.6.3-2)
configuration: --prefix=/root/ffmpeg_build --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --bindir=/root/bin --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264
libavutil 52. 35.100 / 52. 35.100
libavcodec 55. 15.100 / 55. 15.100
libavformat 55. 8.102 / 55. 8.102
libavdevice 55. 2.100 / 55. 2.100
libavfilter 3. 75.101 / 3. 75.101
libswscale 2. 3.100 / 2. 3.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'op.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.8.102
Duration: 00:00:06.00, start: 0.010000, bitrate: 679 kb/s
Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 640x364 [SAR 1:1 DAR 160:91], 590 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 130 kb/s
Metadata:
handler_name : SoundHandler
[segment @ 0x3bf3d60] Codec for stream 0 does not use global headers but container format requires global headers
[segment @ 0x3bf3d60] Codec for stream 1 does not use global headers but container format requires global headers
Output #0, segment, to 'nop%05d.ts':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.8.102
Stream #0:0(eng): Video: mpeg2video, yuv420p, 640x364 [SAR 1:1 DAR 160:91], q=2-31, 128 kb/s, 90k tbn, 25 tbc
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: mp2, 44100 Hz, stereo, s16, 128 kb/s
Metadata:
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> mpeg2video)
Stream #0:1 -> #0:1 (aac -> mp2)
Press [q] to stop, [?] for help
[segment @ 0x3bf3d60] Non-monotonous DTS in output stream 0:1; previous: 347527, current: 346508; changing to 347528. This may result in incorrect timestamps in the output file.
frame= 119 fps=0.0 q=31.0 size=N/A time=00:00:04.68 bitrate=N/A dup=14 drop=0 frame= 151 fps=0.0 q=24.8 Lsize=N/A time=00:00:06.00 bitrate=N/A dup=14 drop=0
video:350kB audio:96kB subtitle:0 global headers:0kB muxing overhead -100.004823%
Respuesta1
Su clip CSI también se convirtió con un mensaje DTS no monótono. Pude reproducir bien el clip MP4 en VLC, pero la reproducción tuvo problemas al final. No estoy seguro de lo que eso significa.
ffmpeg -i op.mp4 -b:v 128k -flags -global_header -map 0:0 -map 0:1 -f segment -segment_time 4 -segment_list_size 0 -segment_list op.m3u8 -segment_format mpegts op%05d.ts
Simplemente obtenga una versión más nueva deffmpeg. El tuyo es de junio de 2013. El mío de marzo de 2014 funcionó bien. El mp4 me suena bien en VLC. Los archivos .ts individuales también funcionaron bien para mí.
C:\temp>dir op*
Volume in drive C has no label.
Volume Serial Number is xxx-xxx
Directory of C:\temp
10/07/2014 08:52 PM 169 op.m3u8
10/07/2014 08:51 PM 509,425 op.mp4
10/07/2014 08:52 PM 404,764 op00000.ts
10/07/2014 08:52 PM 148,520 op00001.ts
4 File(s) 1,062,878 bytes
el op.m3u8 creó el segmento en incrementos de 4 segundos hasta que el archivo se procesó por completo.
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:5
#EXTINF:4.120000,
op00000.ts
#EXTINF:1.960000,
op00001.ts
#EXT-X-ENDLIST
Respuesta2
Ese mp4 dura solo 6 segundos y la transmisión de audio tiene una duración diferente a la del video. Sin embargo, pude sincronizar los dos y deshacerme de los errores de DTS haciendo lo siguiente:
ffmpeg -i op.mp4 -ss 00:00:00.11 -t 00:00:06.00 -vn -y op.wav
ffmpeg -i op.mp4 -ss 0.010000 -t 00:00:06 -vcodec rawvideo -an -y op.avi
ffmpeg -i op.avi -i op.wav -b:v 590k -b:a 130k -t 00:00:06 -y op_fixed.mp4
Básicamente, esto recrea el mp4 y soluciona algunos problemas menores de corrupción mientras hace que ambas transmisiones tengan la misma duración.
Además, su línea de comando no necesita los dos parámetros -map, y ninguno de los códecs del mp4 original admite encabezados globales, además de que no imagino que los necesite de todos modos. Lo siguiente debería completarse sin errores después de completar los pasos que enumeré anteriormente:
ffmpeg -i op_fixed.mp4 -b:v 128k -f segment -segment_time 4 -segment_list_size 0 -segment_list op.m3u8 -segment_format mpegts op%05d.ts