Concat üzerinde Monoton olmayan DTS (ffmpeg)


17

Bu komutu çalıştırdıktan sonra ffmpeg -f concat -i mylist.txt -c copy output.mp4- Bozuk output.mp4dosyayı ve şu mesajı alıyorum:

ffmpeg -f concat -i mylist.txt -c copy output.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, concat, from 'mylist.txt':
  Duration: N/A, start: 0.000000, bitrate: 829 kb/s
    Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1440x900, q=2-31, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598061, current: 467644; changing to 598062. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598062, current: 468044; changing to 598063. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598063, current: 468444; changing to 598064. This may result in incorrect timestamps in the output file.
...
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598362, current: 588044; changing to 598363. This may result in incorrect timestamps in the output file.
frame= 1472 fps=0.0 q=-1.0 Lsize=    5825kB time=00:00:49.04 bitrate= 973.0kbits/s
video:4903kB audio:877kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.776358%

İçeriği mylist.txt

file 'cut.mp4'
file 'cut2.mp4'

ffmpeg'den cut.mp4 çıktısı:

ffmpeg -i cut.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:39.04, start: 0.036281, bitrate: 837 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

ffmpeg'den cut2.mp4 çıkışı:

ffmpeg -i cut2.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:10.07, start: 0.000000, bitrate: 1498 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1440x900, 1271 kb/s, 30 fps, 30 tbr, 12k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 218 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

cut.mp4 Bu komutla aldım ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4

cut2.mp4 Bu komutla aldım ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4

Çok araştırdım - herhangi bir çözüm bulamadım, belki biri bana bu konuda yardımcı olabilir.

output.mp4 oynanabilir, ama garip görünüyor.

resim açıklamasını buraya girin


1
Test yapabilmek için her iki girdi dosyasını da sağlayabilir misiniz?
llogan

@ LordNeckbeard evet, sana gönderdim, çok teşekkür ederim.
whitesiroi

1
Kesin sorunu kopyalayamıyorum. Tessus'tan elde edilen en son statik yapıyı kullanıyorum . Örnek dosyalar ekran görüntünüzden farklı gibi görünmektedir, ancak arama işlemi dağınık gibi görünmesi dışında VLC ve QuickTime'da iyi çalışıyor gibi görünmektedir. Bir OS X makinesinde test ettim çünkü kullandığınız gibi görünüyor.
llogan

@ LordNeckbeard Çok teşekkür ederim, evet bu sürüm ffmpeg sürüm N-71996-g372aa07-tessus ile harika çalışıyor. Teşekkür ederim.
whitesiroi

tl; dr; -c copyyeniden kodlamaya izin vermek veya -c:a copyyalnızca kullanmak için kaldırın . Daha sonra -c copytüm videolar zaten yeniden kodlandığından , concat adımı yine de kullanılabilir . Bu uyarıya sahip bazı videoların concat'tan sonra hala iyi göründüğünü ve bu yüzden -c copyiyi olduğunu unutmayın.
皞 皞

Yanıtlar:


10

En son sürümleri kullanma ffmpeg

Genel kullanıcılar her zaman ffmpeggeçerli git ana dalından (mevcut en son kod) yararlanmalıdır:

  • Bir sorunla karşılaştığınızda yapılacak ilk şey git master'dan bir yapı kullanıp kullanmadığınızı kontrol etmektir.
  • Kararlı olarak kabul edilir.
  • Daha fazla hata düzeltmesi ve özelliği olacak.
  • FFmpeg gelişimi çok aktiftir .
  • Resmi yardım kaynaklarından destek almak istiyorsanız git master'ı kullanmalısınız.
  • Bültenler distribütörler içindir.

Bkz FFmpeg İndir çeşitli seçenekler için sayfa ya bakınız FFmpeg Wiki: Derleme Kılavuzları .

Diğer şey

  • İle komut olarak drawboxsize edebilirsiniz kopyalamak buhar ile ses -c:a copyyeniden kodlamayı yerine.

  • Kullanırken -ss, -toyalnızca -ssbir çıkış seçeneği olarak kullanılırsa beklendiği gibi çalışır .


Çok teşekkür ederim, daha iyi ve daha hızlı çalışır. Lütfen bunu da kontrol edebilir misiniz? Video.stackexchange.com/questions/15477/… Sadece basitleştirilmiş olup olmadığını merak ediyorum.
whitesiroi

@whitesiroi Tabii. Cevap vermiş gibi görünse de, bu soruya mutsuz bir yorumcu yaptım.
llogan

Bunun için özür dilerim.
whitesiroi

1

Https://trac.ffmpeg.org/wiki/Concatenate uyarınca

Aynı sorunu yaşadım. Mac'te ffmpeg 2.6.3 sürümünü çalıştırıyorum. Kaynak kliplerimi -q 0 eklenmiş bir etiketle .MTS biçimine dönüştürdüm, metin dosyasındaki uzantıları güncelledim ve ffmpeg'de concat komutunu çalıştırdığımda çıktı dosyamı .MTS olarak ayarladım. Bir cazibe gibi çalıştı. İşte iş akışım.

ffmpeg -i clip-1.MOV -q 0 clip-1.MTS

ffmpeg -i clip-2.MOV -q 0 clip-2.MTS

metin dosyasını (mylist.txt) okumak için güncelledi:

file clip-1.MTS
file clip-2.MTS

sonra concat komutunu aşağıdaki gibi çalıştırın:

ffmpeg -f concat -i mylist.txt -c copy output.MTS

Benim için çalıştı! Nihai çıktıyı MTS'ye ihtiyacınız olan biçime dönüştürebilirsiniz.


Bu protokol kayıpsız mı?
becko

Hayır, ilk komut kayıpsız bir moda sahip olmayan MPEG-2'ye dönüşür.
Gyan

1

Benzer hatalar aldım ve çıkış videolarımdaki ses bazen senkronize değildi ve bazen tamamen eksikti, ancak mkvmergebunun yerine mkvtoolnix'ten kullandım.

Giriş videolarım farklı ayarlarla kodlanmıştı ve farklı boyutları vardı, bu yüzden ilk önce bunları kullanarak yeniden boyutlandırıp yeniden kodladım ffmpeg:

for f in *.mp4;do w=1280;h=720;ffmpeg -i $f -filter:v "scale=iw*min($w/iw\,$h/ih):ih*min($w/iw\,$h/ih),pad=$w:$h:($w-iw*min($w/iw\,$h/ih))/2:($h-ih*min($w/iw\,$h/ih))/2" -c:v libx264 -crf 22 -preset slow -pix_fmt yuv420p -c:a libfdk_aac -vbr 3 -ac 2 -ar 44100 ${f%mp4}mkv;done

Bazı giriş videolarımın ses kanalı yoktu, bu yüzden onlara sessiz bir ses kanalı eklemek için böyle bir komut kullandım:

for f in *.mkv;do ffprobe $f|&grep -q '1: Audio'||ffmpeg -i $f -f lavfi -i anullsrc -c:a libfdk_aac -shortest -c:v copy temp-$f;mv {temp-,}$f;done

Bundan sonra videoları birleştirdim:

mkvmerge -o /tmp/output.mkv $(printf %s\\n *.mkv|sed '1!s/^/+/')

Giriş dosyalarınız aynı boyutlara, aynı sayıda ses kanalına, aynı ses örnekleme hızına ve benzerlerine mkvmergesahipse, dosyaları kayıpsız bir şekilde birleştirmek için kullanabilirsiniz . İçin giriş dosyaları mkvmergebir MP4 konteynerine de sahip olabilir, ancak dosya adı uzantısı olarak belirtilse bile çıktı dosyasının bir MKV konteyneri olacaktır .mp4. ffmpeg -i output.mkv -c copy output.mp4Kapsayıcıyı değiştirmek için çalıştırabilirsiniz .

mkvmergegibi bir sözdizimi vardır mkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkv, burada mkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkvda kabul edilir.


1

Duncan'ın gerçekten yardımcı cevabına dayanarak:

for f in ./*.mp4; do ffmpeg -i $f -q 0 "${f%.*}.mts"; done

Sonra bu:

ffmpeg -f concat -safe 0 -i <(for f in ./*.mts; do echo "file '$PWD/$f'"; done) -c copy All.mts

0

Bazı kaydedilmiş videoları (TS, MP4 veya MKV olabilir) çıkarmak ve çıkış akışı - zaman damgaları vb. Vb monoton olmayan dts almak için ffmpeg kullandığımda, ortaya çıkan video ya sadece ses var ya da sarsıntılı oynar gibi görünüyor. Bununla güvenilir bir şekilde başa çıkmanın tek yolu AviDemux'u kullanmak. Hem ses hem de video için Kopyalama ayarları ile ve MP4V2 Muxer'i seçerek, Yapılandır seçeneği altında Akış için En İyileştir'i seçmek mümkündür. Ortaya çıkan MP4 dosyası artık hata mesajları oluşturmadan ffmpeg'de kullanılabilir. Bunun yararlı olduğuna güven.

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.