H.264 videoyu TS'den MP4'e kopyalamak kare hızını ve süresini değiştirir


10

Aşağıdaki komutu kullanarak MP4 dönüştürmek büyük MPEG-TS dosyası var. Hem MP4 hem de TS dosyasındaki videoda aynı zamanda arama yaparsam, MP4, TS dosyasının arkasında birkaç kare olacaktır. Bu, aradığım videoya gittikçe daha da kötüleşiyor.

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%

TBN'nin çıkış akışında neden bu kadar büyük olduğu konusunda kafam karıştı. -Copyts, -copytb, tüm -vsynch seçeneklerini denedim, ancak MP4'te eşleşme zamanları alamıyorum. Ayrıca, MP4 29.78 kare hızını gösterirken, TS dosyası ffprobe kullanılarak 30/1 katıdır.

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" 

Her iki konteyneri de aynı çerçeveyi göstermek için aramayı nasıl alabilirim Lütfen yardım et!


1
Girişi kaldırırsanız ne olur -r 30? Zaten bunun sebebi ne? Ayrıca, akış kopyalama modunu etkinleştirirsiniz ; -c:v copybu, çıkışın -r 30yok sayıldığı anlamına gelir .
llogan

@ LordNeckbeard - çıktıdaki birkaç şeyi değiştirir, ama hala arama sorunu var. Bkz. Log @ gist.github.com/andypryor/3b1f123b4c8d6ed3975c , -r 30'a gerek olmadığını açıkladığınız için teşekkür ederiz, kullanımını yanlış anladım, mp4 kare hızını zorlayabileceğimi düşündüm.
Andy

1
Anladığım kadarıyla, mp4 bir kareyi herhangi bir yerde depolamaz, sadece bireysel kareler arasındaki zamanları saklar. Yani ffprobe ilk birkaç karenin kare zamanlarına bakar ve videonun geri kalanının aynı olduğunu varsayar. Yine de sorununuzu çözecek hiçbir fikrim yok. Belki MP4Box gibi ffmpeg dışında bir şey deneyin. Ya da farklı bir şekilde çalışıp çalışmadığını görmek için bir .mkv'ye bile mkvmerge. (ve belki de mf4'ten başka bir şeye ffmpeg muxing'i deneyin. ffmpeg'in mp4 muxer'i mükemmel olmayabilir.)
Peter Cordes

Standart video kare hızı 29,97'dir
çığlık atan matkaplar

çıkış akımının tbn değeri çok küçük 15k. 90k olmalıdır. Ses akışını atmak sorunun kaynağıdır.
Dimitri Podborski

Yanıtlar:


3

Buradaki bir yoruma göre, -r bayrağını kaldırmak bunu düzgün bir şekilde yapmalıdır. Ayrıca giriş için başka bir -r bayrağınız var. Her ikisini de kaldırın ve akışı yeni bir kaba olduğu gibi düzgün bir şekilde kopyalamalıdır; bu -an (sesi devre dışı bırak) anahtarını da kaldırmanız gerekebilir. Bundan emin değilim:

ffmpeg -y -i full-ts.ts -c:v copy full.mp4

Bu başarısız olursa, buradaki bir yorumda da farklı bir çıktı kabı biçimi deneyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.