Tengo un gran archivo MPEG-TS que estoy convirtiendo a MP4 usando el siguiente comando. Si busco al mismo tiempo en el video tanto en el archivo MP4 como en el TS, el MP4 estará unos cuadros detrás del archivo TS. Esto empeora progresivamente a medida que avanzo en el video que busco.
c:\>ffmpeg -y -r 30 -i full-ts.ts -c:v copy -r 30 -an full.mp4
ffmpeg version N-69040-gb23a866 Copyright (c) 2000-2015 the FFmpeg developers
built on Jan 12 2015 22:02:37 with gcc 4.9.2 (GCC)
configuration: --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-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge
r --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. 16.100 / 54. 16.100
libavcodec 56. 20.100 / 56. 20.100
libavformat 56. 18.101 / 56. 18.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 7.100 / 5. 7.100
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Input #0, mpegts, from 'full-ts.ts':
Duration: 00:11:25.75, start: 1.424000, bitrate: 3407 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 125 kb/s
Output #0, mp4, to 'full.mp4':
Metadata:
encoder : Lavf56.18.101
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 30 fps, 30 tbr, 15360 tbn, 30 tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame=20419 fps=0.0 q=-1.0 Lsize= 251660kB time=00:11:25.59 bitrate=3007.0kbits/s
video:251446kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.084929%
Estoy confundido por qué el TBN es tan grande en la secuencia de salida. Intenté -copyts, -copytb, todas las opciones de -vsynch, pero no puedo obtener tiempos de búsqueda que coincidan con el MP4. Además, el MP4 muestra una velocidad de cuadros de 29.78, mientras que el archivo TS es sólido 30/1 usando ffprobe.
ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=avg_frame_rate full.mp4
streams_stream_0_avg_frame_rate="5227264/175529"
ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=avg_frame_rate full-ts.ts
programs_program_0_streams_stream_0_avg_frame_rate="30/1"
streams_stream_0_avg_frame_rate="30/1"
¿Alguna idea de cómo puedo obtener la búsqueda en ambos contenedores para mostrar el mismo marco? ¡Por favor ayuda!
-r 30
? ¿Cuál es la razón de eso de todos modos? Además, habilita el modo de copia de flujo con el-c:v copy
que-r 30
se ignora la salida .Respuestas:
Según un comentario aquí, eliminar la bandera -r debería hacer esto correctamente. También tiene otro indicador -r para la entrada. Elimine ambos, y debería copiar correctamente la secuencia tal como está en un nuevo contenedor; es posible que también necesite eliminar ese interruptor -an (deshabilitar audio). No estoy seguro de eso:
Si eso falla, también según un comentario aquí, puede probar un formato de contenedor de salida diferente.
fuente