एफएफएमपीईजी - गैर-नीरस डीटीएस


15

जब मैं निम्न कमांड का उपयोग करके MP4 से M3U8 में वीडियो परिवर्तित करने के लिए FFMPEG का उपयोग करता हूं,

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

मुझे नीचे चेतावनी मिली है:

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.

M3U8 जेनरेट होता है, लेकिन क्विकटाइम प्लेयर पर केवल ऑडियो ही आ रहा है।

दोनों नमूना MP4 और M3U8 उपलब्ध हैं यहाँ

तो, मैं जानना चाहूंगा

  1. इस त्रुटि के पीछे का कारण। क्या यह एक भ्रष्ट mp4 या रूपांतरण के दौरान समस्या है। M3u8 बजाने योग्य है, ठीक से क्विकटाइम पर खेलने योग्य नहीं है। केवल ऑडियो आता है, कोई वीडियो नहीं।

  2. मैं संभवतः इसे कैसे ठीक कर सकता हूं

पूरा 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%

Vsync और async विकल्पों के साथ, जो त्रुटि दिखाई देती है वह है "स्ट्रीम के लिए कोडेक 0 वैश्विक हेडर का उपयोग नहीं करता है लेकिन कंटेनर प्रारूप में वैश्विक हेडर की आवश्यकता होती है"। यहाँ कंसोल आउटपुट है:

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%

कृपया पूरा ffmpeg कंसोल आउटपुट शामिल करें।
llogan

संपूर्ण ffmpeg कंसोल आउटपुट जोड़ने का संपादन किया गया
Divya Bhargov

यदि आप पैरामीटर जोड़ते हैं तो क्या होता है -vsync 1 -async 1 ?
harrymc

1
मुझे समझ नहीं आ रहा है कि आप क्या करने की कोशिश कर रहे हैं। M3U8 एक प्लेलिस्ट विनिर्देश है, न कि वीडियो प्रारूप। कृपया अपने वांछित उपयोग के मामले में अधिक जानकारी प्रदान करें।
MrDrMcCoy

1
इस ग्रह पर ऐसे 5 लोग हैं जो इसका जवाब जानते हैं ...
bodacydo

जवाबों:


1

आपकी CSI क्लिप गैर-नीरस DTS संदेश के साथ परिवर्तित हो गई। मैं वीएलसी में MP4 क्लिप ठीक से खेलने में सक्षम था, लेकिन अंत में ffplay हिचकी। मुझे यकीन नहीं है कि इसका क्या मतलब है।

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

बस एक नया संस्करण प्राप्त करें ffmpeg । तुम्हारा जून 2013 से है। मार्च 2014 से मेरा बस ठीक काम किया। Mp4 VLC पर मेरे लिए अच्छा खेलता है। व्यक्तिगत .ts फ़ाइलें मेरे लिए भी ठीक खेला है।

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

जब तक फ़ाइल पूरी तरह से संसाधित नहीं हो जाती, तब तक op.m3u8 ने 4 सेकंड की वृद्धि में सेगमेंट बनाया।

#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

1

वह mp4 केवल 6 सेकंड लंबा है, और ऑडियो स्ट्रीम वीडियो की तुलना में एक अलग लंबाई है, मैं दोनों को सिंक करने में सक्षम था और हालांकि निम्नलिखित कार्य करके DTS त्रुटियों से छुटकारा पा सकता हूं:

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

यह मूल रूप से mp4 को फिर से बनाता है और दोनों छोटी धाराओं को समान लंबाई बनाते हुए कुछ छोटे भ्रष्टाचार के मुद्दों को हल करता है।

इसके अलावा, आपकी कमांड लाइन को दो-पैरामीटर मापदंडों की आवश्यकता नहीं है, और न ही मूल mp4 समर्थन ग्लोबल हेडर से कोडेक्स के अलावा, जिसके अलावा मुझे नहीं लगता कि आपको वैसे भी उनकी आवश्यकता होगी। ऊपर सूचीबद्ध चरणों को पूरा करने के बाद निम्नलिखित त्रुटियों के बिना पूरा होना चाहिए:

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.