Konversikan mkv ke mp4 dengan ffmpeg

12

Ketika saya mencoba mengonversi mkv ke mp4 menggunakan ffmpeg, kesalahan berikut terjadi:

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

Saya menggunakan perintah ini untuk mengonversi file:

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

File input memiliki karakteristik sebagai berikut:

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                           : [email protected]  
>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  

Menjadi orang baru di ffmpeg, saya tidak yakin apa artinya kesalahan atau bagaimana cara memperbaikinya.

Terima kasih!

John
sumber
Harap juga sertakan output konsol ffmpeg lengkap yang dihasilkan dari perintah ffmpeg Anda.
Logo
Maaf untuk pemformatan kode; mengutip membuat sulit bagi saya untuk mengedit ...
mengembalikan Monica - ζ--

Jawaban:

20

Seperti yang sudah saya tulis di sini , saya sarankan Anda mengubah beberapa detail di baris perintah Anda:

  • Jika Anda menggunakan rilis Ubuntu yang lebih tua dari 15,04, ganti ffmpegfor avconv, karena itu adalah garpu yang digunakan oleh Ubuntu selama beberapa tahun (lihat komentar)
  • Apakah Anda benar-benar membutuhkan -absf aac_adtstoasc? Itu memiliki beberapa masalah yang mungkin belum diperbaiki di ffmpeg Ubuntu saat ini. Saya sarankan Anda untuk mencoba tanpanya terlebih dahulu.
  • -vcodec copy -acodec copydapat disederhanakan menjadi -codec copyatau -c copy. Itu juga akan mencegah gangguan aliran lain selain video dan audio, seperti terjemahan.

Jadi pemenangnya adalah ...

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

Jika itu tidak berhasil, silakan kirim semua output terminal.

MestreLion
sumber
-1. saya mendapatkan kesalahan yang sama dengan baris perintah yang Anda berikan. sepertinya Anda hanya menjadi orang yang sangat menyombongkan diri di sini.
ixtmixilix
@ixtmixilix: peduli untuk memposting output terminal? Anda avconv's versi mungkin berbeda dari saya.
MestreLion
@ixtmixilix: juga, mengapa pedantic? Saya menawarinya alternatif, satu yang patut dicoba, dan menunggu umpan balik. Tidak ada gunanya membatalkan jawaban ini dan jawaban lainnya (yang dengan sempurna memecahkan pertanyaan OP btw)
MestreLion
Sekarang avconvtidak dipelihara lagi di Ubuntu :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 wow, benarkah? Apakah kita kembali ffmpeg? Punya sumber atau referensi tentang perubahan itu?
MestreLion
3

Saya tahu ini adalah utas yang sangat lama, tetapi saya telah menemukan solusi untuk menjalankan ffmpeg dengan sukses. Jangan gunakan -vcodec copy -acodec copy, gunakan saja ffmpeg -i input.mkv output.m4v. Ini akan mulai berjalan.

Tetapi dalam kasus saya, saya mengonversi .mkv ke .mp4, hasil keluarannya hanya sampah. Itu kehilangan akurasi bingkai.

Mouse Anonim
sumber
5
Jika Anda tidak menggunakan copycodec, itu akan memasukkan ulang dan kehilangan kualitas.
nyuszika7h
2

Untuk secara otomatis mengonversi semua file dalam folder dari MKV ke MP4 Anda dapat membuat alias:

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

Perintah ini melakukan langkah-langkah berikut:

  • Secara berulang loop melalui direktori saat ini mencari file .mkv
  • Mengonversi setiap file menjadi .mp4, bukan menimpa file yang ada
  • Menghapus file sumber ketika konversi berhasil
Guido Bouman
sumber
Tolong jelaskan perintah Anda sedikit demi sedikit lebih baik.
derHugo
Apa yang Anda ingin tahu? Ada ringkasan tentang apa yang dilakukan perintah tepat di bawahnya.
Guido Bouman
0

sudah ada jawaban tentang ini. Bagaimana mengkonversi file .mkv ke file .mp4 tanpa kehilangan?

konsep dasarnya adalah bahwa baik MKV dan MP4 adalah wadah, mereka hanya wadah, Anda pada dasarnya harus membongkar dan mengemas ulang trek audio dan video jika Anda ingin beralih di antara keduanya.

pengguna827992
sumber
Saya membaca itu tetapi saya mencoba belajar bagaimana melakukannya dengan ffmpeg, bukan alat-alat lainnya. Saya menggunakan rem tangan setiap saat tetapi itu tidak membantu saya memahami bagaimana melakukannya di ffmpeg. Hanya mencoba mempelajari sesuatu yang baru.
JohnS
@JohnS ffmpeg mungkin bukan pilihan terbaik, karena selalu mencoba untuk menyandikan ulang semuanya dan Anda membuang waktu dan sumber daya melakukan hal ini, toh forum.doom9.org/showthread.php?t=164683 ini mungkin bisa menjadi titik awal yang baik untukmu.
user827992
3
@ user827992 Ini tidak benar. ffmpeg tidak selalu mencoba untuk menyandikan ulang semuanya. Apakah Anda bahkan membaca detail dalam pertanyaan? Contoh dalam pertanyaan jelas berusaha menyalin aliran, bukan menyandikan ulang.
Logo
2
@ user827992: baik ffmpeg dan avconv dapat mengemas ulang tanpa kehilangan dari wadah ke wadah lain tanpa mengkode ulang konten.
MestreLion
0

Coba yang ini :: Libav di Linux

Instalasi: jalankan perintah

sudo apt-get install libav-tools

Perintah konversi video :: Buka folder berisi video dan jalankan di terminal

avconv -i oldvideo.mkv -ar 22050 convertedvideo.mp4
Vishal
sumber