Konwertuj mkv na mp4 za pomocą ffmpeg


14

Podczas próby konwersji mkv na mp4 przy użyciu ffmpeg występuje następujący błąd:

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

Użyłem tego polecenia do konwersji pliku:

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

Plik wejściowy ma następujące cechy:

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  

Będąc nowym użytkownikiem ffmpeg, nie jestem pewien, co oznacza błąd ani jak go naprawić.

Dzięki!


Dołącz także pełne dane wyjściowe konsoli ffmpeg wynikające z polecenia ffmpeg.
llogan

Przepraszamy za formatowanie kodu; cytowanie utrudniło mi edycję ...
nanofarad

Odpowiedzi:


22

Jak już tu napisałem , proponuję zmienić kilka szczegółów w wierszu poleceń:

  • Jeśli używasz wersji Ubuntu starszej niż 15.04, wymień ffmpegna avconv, ponieważ był to widelec używany przez Ubuntu przez kilka lat (zobacz komentarze)
  • Czy naprawdę potrzebujesz -absf aac_adtstoasc? Miał pewne problemy, które mogły nie zostać naprawione w ffmpeg obecnego Ubuntu. Proponuję najpierw spróbować bez niego.
  • -vcodec copy -acodec copymożna uprościć do -codec copylub -c copy. Zapobiegnie również manipulowaniu innymi strumieniami oprócz wideo i audio, takimi jak napisy.

Zwycięzcą jest ...

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

Jeśli to nie zadziała, proszę zamieścić wszystkie wyjścia terminala.


-1. pojawia się ten sam błąd w podanym wierszu polecenia. wygląda na to, że jesteś tu pedantyczny.
ixtmixilix

@ixtmixilix: chcesz opublikować wyjście terminala? Twoja avconvwersja może być inna niż moja.
MestreLion,

@ixtmixilix: też, dlaczego pedantyczny? Zaproponowałem mu alternatywę, którą warto wypróbować, i czekałem na opinie. Nie ma sensu głosować za tą i drugą odpowiedzią (która doskonale rozwiązała pytanie PO)
MestreLion,

Teraz avconvnie jest już utrzymywany w Ubuntu :-)
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

@CiroSantilli 法轮功 文件 六四 事件 法轮功 wow, naprawdę? Wróciliśmy do ffmpeg? Masz jakieś źródła lub referencje dotyczące zmiany?
MestreLion

3

Wiem, że to bardzo stary wątek, ale znalazłem rozwiązanie, aby pomyślnie uruchomić ffmpeg. Nie używaj -vcodec copy -acodec copy, użyj tylko ffmpeg -i input.mkv output.m4vzamiast tego. Zacznie działać.

Ale w moim przypadku konwertuję .mkv do .mp4, wynik jest po prostu śmieci. Traci dokładność ramki.


5
Jeśli nie użyjesz copykodeka, ponownie go zakoduje i straci jakość.
nyuszika7h

2

Aby automatycznie przekonwertować wszystkie pliki w folderze z MKV na MP4, możesz utworzyć alias:

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

To polecenie wykonuje następujące kroki:

  • Rekurencyjnie zapętla się w bieżącym katalogu w poszukiwaniu plików .mkv
  • Konwertuje każdy plik na .mp4, nie zastępując istniejących plików
  • Usuwa plik źródłowy, gdy konwersja się powiodła

Proszę wyjaśnić swoje polecenie krok po kroku.
derHugo,

Co chciałbyś wiedzieć? Poniżej znajduje się podsumowanie czynności wykonywanych przez polecenie.
Guido Bouman

0

istnieje już odpowiedź na ten temat Jak bezstratnie przekonwertować plik .mkv na plik .mp4?

podstawowa koncepcja jest taka, że ​​zarówno MKV, jak i MP4 to kontenery, to tylko kontenery, w zasadzie musisz rozpakować i ponownie spakować ścieżki audio i wideo, jeśli chcesz przełączać się między nimi.


Przeczytałem to, ale staram się nauczyć, jak to zrobić za pomocą ffmpeg zamiast tych innych narzędzi. Cały czas używam hamulca ręcznego, ale to nie pomaga mi zrozumieć, jak to zrobić w ffmpeg. Próbuję nauczyć się czegoś nowego.
JohnS

@JohnS ffmpeg prawdopodobnie nie jest najlepszym wyborem, ponieważ zawsze próbuje ponownie zakodować wszystko i marnujesz czas i zasoby, robiąc to, w każdym razie forum.doom9.org/showthread.php?t=164683 może to prawdopodobnie stać się dobrym punktem wyjścia dla Was.
user827992

3
@ user827992 To jest nieprawidłowe. ffmpeg nie zawsze próbuje ponownie kodować wszystko. Czy przeczytałeś nawet szczegóły pytania? Przykład w pytaniu wyraźnie próbuje skopiować strumienie, a nie ponownie kodować.
llogan

2
@ user827992: zarówno ffmpeg, jak i avconv są w stanie bezstratnie przepakowywać z kontenera do drugiego bez ponownego kodowania zawartości.
MestreLion


0

Spróbuj tego :: Libav w systemie Linux

Instalacja: uruchom polecenie

sudo apt-get install libav-tools

Polecenie konwersji wideo :: Idź do folderu zawiera wideo i uruchom w terminalu

avconv -i oldvideo.mkv -ar 22050 convertedvideo.mp4
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.