Ffmpeg ile mkv'yi mp4'e dönüştürme


15

Ffmpeg kullanarak mkv mp4 dönüştürmeyi denediğinizde, aşağıdaki hata oluşur:

version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers   built on Jun 12 2012 16:52:09 with gcc 4.6.3  
 *** THIS PROGRAM IS DEPRECATED ***   This program is only provided for compatibility and will be removed in a future release. Please use
 avconv instead.   [matroska,webm @ 0x1e939c0] max_analyze_duration
 reached   [matroska,webm @ 0x1e939c0] Estimating duration from
 bitrate, this may be inaccurate   Input #0, matroska,webm, from
 'input.mkv':     Duration: 00:01:00.76, start: 0.000000, bitrate: 384
 kb/s  
     Stream #0.0(eng): Video: h264 (High), yuv420p, 1280x544, PAR 1:1 DAR 40:17, 25 fps, 25 tbr, 1k tbn, 50 tbc (default)  
     Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s (default)  
     Stream #0.2(eng): Subtitle: [0][0][0][0] / 0x0000   Output #0, ipod, to 'output.m4v':     Metadata:  
     encoder         : Lavf53.21.0  
     Stream #0.0(eng): Video: libx264, yuv420p, 1280x544 [PAR 1:1 DAR 40:17], q=2-31, 25 tbn, 25 tbc (default)  
     Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, 384 kb/s (default)   Stream mapping:     Stream #0.0 -> #0.0     Stream #0.1 -> #0.1  
 Press ctrl-c to stop encoding   [ipod @ 0x1e9b740] Application
 provided invalid, non monotonically increasing dts to muxer in stream
 0: -2 >= -2 av_interleaved_write_frame(): Invalid argument

Dosyayı dönüştürmek için bu komutu kullandım:

ffmpeg -i input.mkv -vcodec copy -acodec copy -absf aac_adtstoasc output.m4v

Giriş dosyası aşağıdaki özelliklere sahiptir:

mediainfo input.mkv 


>General
>
>Unique ID                                : 200459305952356554213392832683163418790 (0x96CF0ED8DB5914CBB9E18163689280A6)  
>Complete name                            : input.mkv  
>Format                                   : Matroska  
>Format version                           : Version 2  
>File size                                : 1.46 GiB  
>Duration                                 : 1h 5mn  
>Overall bit rate                         : 3 168 Kbps  
>Encoded date                             : UTC 2010-09-26 21:44:02  
>Writing application                      : mkvmerge v2.9.5 ('Tu es le seul') built on >Jun 17 2009 16:28:30  
>Writing library                          : libebml v0.7.8 + libmatroska v0.8.1  
>
>Video
>ID                                       : 1  
>Format                                   : AVC  
>Format/Info                              : Advanced Video Codec  
>Format profile                           : High@L3.1  
>Format settings, CABAC                   : Yes  
>Format settings, ReFrames                : 4 frames  
>Codec ID                                 : V_MPEG4/ISO/AVC  
>Duration                                 : 1h 5mn  
>Bit rate                                 : 2 910 Kbps  
>Width                                    : 1 280 pixels  
>Height                                   : 720 pixels  
>Display aspect ratio                     : 16:9  
>Frame rate                               : 25.000 fps  
>Color space                              : YUV  
>Chroma subsampling                       : 4:2:0  
>Bit depth                                : 8 bits  
>Scan type                                : Progressive  
>Bits/(Pixel*Frame)                       : 0.126  
>Stream size                              : 1.31 GiB (90%)  
>Writing library                          : x264 core 105 r1724 b02df7b  
>Encoding settings                        : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=6 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-2 / threads=18 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=0 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc=2pass / mbtree=0 / bitrate=2910 / ratetol=1.0 / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:1.00  
>
>Default                                  : Yes  
>Forced                                   : No  
>
>Audio
>ID                                       : 2  
>Format                                   : AC-3  
>Format/Info                              : Audio Coding 3  
>Mode extension                           : CM (complete main)  
>Codec ID                                 : A_AC3  
>Duration                                 : 1h 5mn  
>Bit rate mode                            : Constant  
>Bit rate                                 : 256 Kbps  
>Channel(s)                               : 2 channels  
>Channel positions                        : Front: L R  
>Sampling rate                            : 48.0 KHz  
>Bit depth                                : 16 bits  
>Compression mode                         : Lossy  
Stream size                              : 121 MiB (8%)  
Language                                 : English  
Default                                  : Yes  
Forced                                   : No  

Ffmpeg için yeni olmak, hatanın ne anlama geldiğinden veya nasıl düzeltileceğinden emin değilim.

Teşekkürler!


Lütfen ffmpeg komutunuzdan kaynaklanan tam ffmpeg konsol çıkışını da ekleyin.
llogan

Kodun biçimlendirilmesi için özür dileriz; alıntı yapmak benim için zor yaptı ...
nanofarad

Yanıtlar:


22

Burada daha önce yazdığım gibi, komut satırınızdaki birkaç ayrıntıyı değiştirmenizi öneririm:

  • 15.04'ten daha eski bir Ubuntu sürümü kullanıyorsanız, Ubuntu tarafından birkaç yıldır kullanılan çatal olduğu ffmpegiçin değiştirin avconv(yorumlara bakın)
  • Gerçekten ihtiyacın var -absf aac_adtstoascmı? Mevcut Ubuntu'nun ffmpeg'inde düzeltilmemiş olabilecek bazı sorunlar vardı . Önce onsuz denemenizi öneririm.
  • -vcodec copy -acodec copybasitleştiirlebilir -codec copyya -c copy. Ayrıca, video ve sesin yanı sıra altyazılar gibi diğer akışların tahrif edilmesini de önleyecektir.

Yani kazanan ...

ffmpeg -i input.mkv -c copy output.m4v

Bu işe yaramazsa, lütfen tüm terminal çıkışını kaydedin.


-1. Sağladığınız komut satırı ile aynı hatayı alıyorum. burada sadece bilgiçlik yapıyorsun.
ixtmixilix

@ixtmixilix: terminal çıkışını yayınlamak ister misiniz? Sizin avconvversiyonunuz benimkinden farklı olabilir.
MestreLion

@ixtmixilix: ayrıca, neden bilgiçlik? Ona denemeye değer bir alternatif sundum ve geri bildirim bekledim. Bunu ve diğer cevabı (OP'nin btw sorusunu mükemmel bir şekilde çözdü)
aşağıya düşürmenin bir anlamı yok

Artık avconvUbuntu'da
bakım yapılmıyor

@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 vay, gerçekten mi? Geri mi döndük ffmpeg? Değişiklikle ilgili kaynaklarınız veya referanslarınız var mı?
MestreLion

3

Ben çok eski bir iş parçacığı biliyorum, ama başarıyla ffmpeg çalıştırmak için bir çözüm buldum. Kullanmayın -vcodec copy -acodec copy, ffmpeg -i input.mkv output.m4vbunun yerine kullanın. Çalışmaya başlayacak.

Ama benim durumumda, bir .mkv'yi .mp4'e dönüştürüyorum, sonuç çıktısı sadece çöp. Çerçeve hassasiyetini kaybeder.


5
copyCodec bileşenini kullanmazsanız, kodu yeniden kodlar ve kaliteyi kaybeder.
nyuszika7h

3

Bir klasördeki tüm dosyaları MKV'den MP4'e otomatik olarak dönüştürmek için bir takma ad oluşturabilirsiniz:

alias mkv2mp4="for f in ./**/*.mkv; do ffmpeg -n -i \"\$f\" -c copy \"\${f%.mkv}.mp4\" && rm \"\$f\"; done"

Bu komut aşağıdaki adımları gerçekleştirir:

  • .Mkv dosyalarını arayan geçerli dizinde yinelemeli olarak döngüler
  • Varolan dosyaların üzerine yazmamak yerine her dosyayı .mp4 biçimine dönüştürür
  • Dönüşüm başarılı olduğunda kaynak dosyayı kaldırır

Lütfen komutunuzu adım adım daha iyi açıklayın.
derHugo

Ne bilmek istiyorsun? Komutun hemen altında ne yaptığının bir özeti vardır.
Guido Bouman

0

Bu konuda zaten bir cevap var .mkv dosyasını kayıpsız bir şekilde .mp4 dosyasına nasıl dönüştürebilirim?

temel kavram, hem MKV hem de MP4'ün kaplar olduğu, sadece kaplar olduğu, ikisi arasında geçiş yapmak istiyorsanız ses ve video parçalarını paketinden çıkarmanız ve yeniden paketlemeniz gerekir.


Bunu okudum ama diğer araçlar yerine ffmpeg ile nasıl yapacağımı öğrenmeye çalışıyorum . El frenini her zaman kullanıyorum ama bu ffmpeg'de nasıl yapılacağını anlamama yardımcı olmuyor. Sadece yeni bir şey öğrenmeye çalışıyorum.
JohnS

@JohnS ffmpeg muhtemelen en iyi seçim değildir, çünkü her zaman her şeyi yeniden kodlamaya çalışır ve bunu yaparken zaman ve kaynak harcarsınız , yine de forum.doom9.org/showthread.php?t=164683 bu muhtemelen iyi bir başlangıç ​​noktası olabilir senin için.
user827992

3
@ user827992 Bu yanlış. ffmpeg her zaman her şeyi yeniden kodlamaya çalışmaz. Sorudaki detayları bile okudunuz mu? Sorudaki örnek, yeniden kodlamak yerine akışları kopyalamaya çalışıyor.
llogan

2
@ user827992: hem ffmpeg hem de avconv içeriği yeniden sağlamadan kaptan diğerine kayıpsız bir şekilde yeniden paketleyebilir.
MestreLion


0

Bu seferki :: deneyin Libav Linux

Kurulum: çalıştırma komutu

sudo apt-get install libav-tools

Video dönüştürme komutu :: Klasöre git videoyu içerir ve terminalde çalışır

avconv -i oldvideo.mkv -ar 22050 convertedvideo.mp4
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.