Chuyển đổi mkv sang mp4 với ffmpeg


12

Khi tôi thử chuyển đổi mkv sang mp4 bằng ffmpeg, sẽ xảy ra lỗi sau:

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

Tôi đã sử dụng lệnh này để chuyển đổi tập tin:

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

Tệp đầu vào có các đặc điểm sau:

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  

Là người mới sử dụng ffmpeg, tôi không chắc lỗi này có nghĩa là gì hoặc cách khắc phục.

Cảm ơn!


Ngoài ra, vui lòng bao gồm đầu ra giao diện điều khiển ffmpeg hoàn chỉnh xuất phát từ lệnh ffmpeg của bạn.
llogan

Xin lỗi vì định dạng của mã; đoạn trích dẫn khiến tôi khó chỉnh sửa ...
Tái lập lại Monica - -

Câu trả lời:


20

Như tôi đã viết ở đây , tôi khuyên bạn nên thay đổi một vài chi tiết trong dòng lệnh của mình:

  • Nếu bạn đang sử dụng một phiên bản Ubuntu cũ hơn 15.04, thay thế ffmpegcho avconv, vì nó là ngã ba được sử dụng bởi Ubuntu trong một vài năm (xem các ý kiến)
  • Bạn có thực sự cần -absf aac_adtstoasc? Nó có một số vấn đề có thể chưa được sửa trong ffmpeg của Ubuntu hiện tại. Tôi đề nghị bạn thử mà không có nó đầu tiên.
  • -vcodec copy -acodec copycó thể được đơn giản hóa để -codec copyhoặc -c copy. Nó cũng sẽ ngăn chặn các luồng khác ngoài video và âm thanh, như phụ đề.

Vậy người chiến thắng là ...

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

Nếu điều đó không làm việc, xin vui lòng gửi tất cả đầu ra thiết bị đầu cuối.


-1. tôi nhận được cùng một lỗi với dòng lệnh bạn cung cấp. có vẻ như bạn chỉ là người phạm tội ở đây.
ixtmixilix

@ixtmixilix: quan tâm để gửi đầu ra thiết bị đầu cuối? Bạn avconv's phiên bản có thể khác so với tôi.
MestreLion

@ixtmixilix: còn nữa, tại sao phải phạm tội? Tôi đề nghị anh ta một giải pháp thay thế, đáng để thử và chờ phản hồi. Không có điểm nào hạ thấp điều này câu trả lời khác (đã giải quyết hoàn hảo câu hỏi của OP btw)
MestreLion

Bây giờ avconvkhông còn được duy trì nữa trong Ubuntu :-)
Ciro Santilli 改造 心 心

@CiroSantilli 巴拿馬 件 wow, thật sao? Chúng ta quay trở lại ffmpeg? Có bất kỳ nguồn hoặc tài liệu tham khảo về sự thay đổi?
MestreLion

3

Tôi biết một chủ đề rất cũ, nhưng tôi đã tìm thấy một giải pháp để chạy thành công ffmpeg. Đừng sử dụng -vcodec copy -acodec copy, chỉ sử dụng ffmpeg -i input.mkv output.m4vthay thế. Nó sẽ bắt đầu chạy.

Nhưng trong trường hợp của tôi, tôi chuyển đổi một .mkv thành .mp4, kết quả đầu ra chỉ là rác. Nó mất độ chính xác của khung.


5
Nếu bạn không sử dụng copycodec, nó sẽ mã hóa lại và mất chất lượng.
nyuszika7h

2

Để tự động chuyển đổi tất cả các tệp trong một thư mục từ MKV sang MP4, bạn có thể tạo bí danh:

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

Lệnh này thực hiện các bước sau:

  • Các vòng lặp đệ quy thông qua thư mục hiện tại đang tìm kiếm các tệp .mkv
  • Chuyển đổi từng tệp thành .mp4, không ghi đè các tệp hiện có
  • Xóa tệp nguồn khi chuyển đổi thành công

Hãy giải thích lệnh của bạn tốt hơn một chút từng bước.
derHugo

Bạn muốn biết về điều gì? Có một bản tóm tắt về những gì lệnh thực hiện ngay bên dưới nó.
Guido Bouman

0

đã có câu trả lời về điều này Làm thế nào để chuyển đổi tập tin .mkv thành tập tin .mp4 một cách dễ dàng?

Khái niệm cơ bản là cả MKV và MP4 đều là các thùng chứa, chúng chỉ là các thùng chứa, về cơ bản bạn phải giải nén và đóng gói lại các bản nhạc và video nếu bạn muốn chuyển đổi giữa hai loại.


Tôi đọc nó nhưng tôi đang cố gắng học cách làm với ffmpeg thay vì những công cụ khác. Tôi sử dụng phanh tay mọi lúc nhưng điều đó không giúp tôi hiểu cách thực hiện trong ffmpeg. Chỉ cần cố gắng để học một cái gì đó mới.
JohnS

@JohnS ffmpeg có lẽ không phải là lựa chọn tốt nhất, bởi vì nó luôn luôn cố gắng để tái mã hóa tất cả mọi thứ và bạn lãng phí thời gian và nguồn lực thực hiện điều này, dù sao forum.doom9.org/showthread.php?t=164683 này có lẽ có thể trở thành một điểm tốt bắt đầu cho bạn.
dùng827992

3
@ user827992 Điều này không chính xác. ffmpeg không phải lúc nào cũng cố gắng mã hóa lại mọi thứ. Bạn thậm chí đã đọc các chi tiết trong câu hỏi? Ví dụ trong câu hỏi rõ ràng là cố gắng sao chép các luồng, không mã hóa lại.
llogan

2
@ user827992: cả ffmpeg và avconv đều có thể đóng gói lại một cách dễ dàng từ container này sang container khác mà không cần mã hóa lại nội dung.
MestreLion

0

Có được điều này trên Xubfox 14.04 khi cố gắng ghi đĩa DVD MP4 bằng DVDStyler; Bombono tạo ra lỗi tương tự. ffmpeg # 1154 cho thấy điều này có thể đã được sửa ffmpeg, mặc dù có lẽ không phải trong avconv? libav # 478 vẫn được đánh dấu mở.

Xem thêm: /unix/127522/avconv-error-av-interleaved-write-frame

Tôi đã nộp Launchpad # 1339980 ; Tóm lại, sử dụng một bản phát hành hiện tại ffmpeg, và không avconv.


0

Hãy thử cái này :: Libav trong Linux

Cài đặt: chạy lệnh

sudo apt-get install libav-tools

Lệnh chuyển đổi video :: Chuyển đến thư mục chứa video và chạy trong thiết bị đầu cuối

avconv -i oldvideo.mkv -ar 22050 convertedvideo.mp4
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.