J'ai un gros fichier MPEG-TS que je convertis en MP4 en utilisant la commande ci-dessous. Si je cherche en même temps dans la vidéo à la fois dans le fichier MP4 et TS, le MP4 sera quelques images derrière le fichier TS. Cela empire progressivement au fur et à mesure que je cherche la vidéo.
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%
Je ne comprends pas pourquoi le TBN est si grand dans le flux de sortie. J'ai essayé -copyts, -copytb, toutes les options -vsynch, mais je ne peux pas obtenir de temps de recherche pour correspondre sur le MP4. En outre, le MP4 affiche une fréquence d'images de 29,78, tandis que le fichier TS est solide 30/1 en utilisant 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"
Une idée comment je peux obtenir la recherche sur les deux conteneurs pour afficher le même cadre? Aidez-moi!
-r 30
? Quelle est la raison de cela de toute façon? En outre, vous activez le mode de copie de flux avec-c:v copy
lequel la sortie-r 30
est ignorée.Réponses:
Selon un commentaire ici, la suppression de l'indicateur -r devrait le faire correctement. Vous avez également un autre indicateur -r pour l'entrée. Supprimez les deux, et il devrait copier correctement le flux tel qu'il est dans un nouveau conteneur; vous devrez peut-être également supprimer ce commutateur -un (désactiver l'audio). Je ne suis pas sûr à ce sujet:
Si cela échoue, également par un commentaire ici, vous pouvez essayer un autre format de conteneur de sortie.
la source