MKV'ye remux ederken avconv'u kullanarak paketlenmiş AVI giriş dosyalarını düzeltmenin bir yolu var mı?


11

Plex sunucusu ve Panasonic TV'ler arasındaki uyumluluk hataları nedeniyle, iyi çalışmasını sağlamanın tek yolu her şeyi MKV'ye yeniden düzenlemektir, tüm akışları düz olarak kopyalayın (video, ses, altyazı)

Yeterince basit görünüyor:

avconv -i "input.avi" -c copy "output.mkv"

Dışında:

avconv version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
  built on Apr  2 2013 17:00:59 with gcc 4.6.3
[mpeg4 @ 0x8422140] Invalid and inefficient vfw-avi packed B frames detected
Input #0, avi, from 'input.avi':
  Metadata:
    encoder         : VirtualDubMod 1.5.4.1 (build 2117/release)
  Duration: 00:27:38.52, start: 0.000000, bitrate: 1173 kb/s
    Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 640x352 [PAR 1:1 DAR 20:11], 25 tbr, 25 tbn, 25 tbc
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 132 kb/s
File 'output.mkv' already exists. Overwrite ? [y/N] y
Output #0, matroska, to 'output.mkv':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: mpeg4, yuv420p, 640x352 [PAR 1:1 DAR 20:11], q=2-31, 1k tbn, 25 tbc
    Stream #0.1: Audio: libmp3lame, 48000 Hz, stereo, 132 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press ctrl-c to stop encoding
[matroska @ 0x8422cc0] Can't write packet with unknown timestamp
av_interleaved_write_frame(): Invalid argument

İlgili gotcha hatları şu şekilde:

[mpeg4 @ 0x8422140] Invalid and inefficient vfw-avi packed B frames detected#
<snip>
[matroska @ 0x8422cc0] Can't write packet with unknown timestamp
av_interleaved_write_frame(): Invalid argument

B karelerini açmak için bir seçenek göremiyorum (veya bir VBR zaman haritası oluşturuyor musunuz? Avconv'da bunlara ihtiyacımız var mı?)

Bunu yapmak için bir yol var mı, avidemux'da olduğu gibi?

Yanıtlar:


8

Bir çözüm ilk olarak .mp4 biçimine dönüştürmektir:

avconv -i input.avi -c copy temp.mp4
avconv -i temp.mp4 -c copy output.mkv
rm temp.mp4

Ne yazık ki, mp4 biçimini avconv örnekleri arasında basitçe iletemezsiniz: "[mp4 @ 0x80846c0] muxer aranamayan çıktıyı desteklemiyor"


Teşekkürler, bu akşam deneyeceğim. Arabellek gibi davranan bir komut var mı acaba? Hepsini stdout'a geçirmeden önce yazma komutunun stdin'in tamamlanmasını bekler. Stdout arayışı ile. Bu kullanışlı olurdu. avconv -i xxx | buf | avconv -i stdin xxx
RoboJ1M

1
Eklediğim hata mesajı özellikle borular doğal olarak aranamayacağı için avconv ile boruları kullanmaya çalışmakla ilgilidir. Yapabileceğiniz en iyi şey tmpfs veya benzeri bir bellek içi dosya sisteminde temp.mp4 bulmaktır. / dev / shm / yeterli RAM'e sahipse bunun için iyi bir adaydır.
rmsr

Boru ile ilgili olarak, muhtemelen adlandırılmış borular aka fifo ile yapabilirsiniz. İçin bir arama yapın mkfifo. Temelde, bir dosyayı sağlam bir depolama için geçici olarak kullanırsınız.
Sparhawk

Bu çözüm aynı zamanda ffmpeg için çalışıyor
c97

8

İtibariyle bugtracker Ffmpeg bu bilet # 1979 En basit çözümü bu hata düzeltildi etmiş veya el eklemektir -fflags +genptskomut satırına.

Yani değişiklik

ffmpeg -i inputfile_that_cant_be_muxed_into_mkv.ext -c copy out.mkv

için

ffmpeg -fflags +genpts -i inputfile_that_cant_be_muxed_into_mkv.ext -c copy out.mkv

1
Bu hala bana aynı hatayı veriyor: /
Felix

Dosyanın sonunda avconvbir tek görüntülenene kadar 0.8.16 sürümünde benim için çalışır Can't write packet with unknown timestamp. Tuhaf.
malat

2
-fflagsBir giriş seçeneği olarak kullanıldığından emin olun : önce bir seçenek olmalıdır -i input. Ama +genptsdoğru yere koymasaydın, muhtemelen işe yaramazdı .
Peter Cordes

Bu, avconv9.18-6: 9.18-0ubuntu0.14.04.1 ile de iyi çalışıyor
Elder Geek

2

Andreas Cadhalpun sayesinde ffmpegşimdi yeni bir filtre var: mpeg4_unpack_bframes(bkz. Ref ). Bu mesajın kurtulmak sağlayacaktır: Invalid and inefficient vfw-avi packed B frames detected.

Kullanımı kadar basit:

ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
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.