Convertir mkv en mp4 avec ffmpeg

13

Lorsque j'essaie de convertir mkv en mp4 à l'aide de ffmpeg, l'erreur suivante se produit:

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

J'ai utilisé cette commande pour convertir le fichier:

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

Le fichier d'entrée présente les caractéristiques suivantes:

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  

Étant nouveau sur ffmpeg, je ne sais pas ce que signifie l'erreur ni comment la corriger.

Merci!

JohnS
la source
Veuillez également inclure la sortie complète de la console ffmpeg résultant de votre commande ffmpeg.
llogan
Désolé pour le formatage du code; la citation m'a fait du mal à éditer ...
Réintégrer Monica - ζ--

Réponses:

22

Comme je l'ai déjà écrit ici , je vous suggère de modifier quelques détails dans votre ligne de commande:

  • Si vous utilisez une version d'Ubuntu antérieure à 15.04, remplacez ffmpegpar avconv, car c'était la fourche utilisée par Ubuntu depuis quelques années (voir les commentaires)
  • En avez-vous vraiment besoin -absf aac_adtstoasc? Il y avait quelques problèmes qui n'ont peut-être pas été corrigés dans le ffmpeg d'Ubuntu actuel. Je vous suggère d'essayer sans d'abord.
  • -vcodec copy -acodec copypeut être simplifié en -codec copyou -c copy. Cela empêcherait également d'altérer d'autres flux en plus de la vidéo et de l'audio, comme les sous-titres.

Le gagnant est donc ...

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

Si cela ne fonctionne pas, veuillez publier toutes les sorties du terminal.

MestreLion
la source
-1. j'obtiens la même erreur avec la ligne de commande que vous avez fournie. il semble que vous soyez juste pédant ici.
ixtmixilix
@ixtmixilix: vous voulez publier la sortie du terminal? Votre avconvversion peut être différente de la mienne.
MestreLion
@ixtmixilix: aussi, pourquoi pédant? Je lui ai proposé une alternative, une qui valait la peine d'être essayée, et j'ai attendu les commentaires. Cela ne sert à rien de voter pour cette réponse et pour l'autre (qui a parfaitement résolu la question du PO entre les deux)
MestreLion
Maintenant avconvn'est plus maintenu dans Ubuntu :-)
Ciro Santilli 事件 改造 中心 法轮功 六四 事件
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 wow, vraiment? Sommes-nous de retour ffmpeg? Vous avez des sources ou des références sur le changement?
MestreLion
3

Je sais que c'est un très vieux thread, mais j'ai trouvé une solution pour exécuter correctement ffmpeg. N'utilisez pas -vcodec copy -acodec copy, utilisez juste à la ffmpeg -i input.mkv output.m4vplace. Il commencera à fonctionner.

Mais dans mon cas, je convertis un .mkv en .mp4, la sortie du résultat est juste une corbeille. Il perd la précision de la trame.

Souris anonyme
la source
5
Si vous n'utilisez pas le copycodec, il se réencodera et perdra en qualité.
nyuszika7h
2

Pour convertir automatiquement tous les fichiers d'un dossier de MKV en MP4, vous pouvez créer un alias:

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

Cette commande effectue les étapes suivantes:

  • Boucle récursive dans le répertoire courant à la recherche de fichiers .mkv
  • Convertit chaque fichier en .mp4, sans écraser les fichiers existants
  • Supprime le fichier source lorsque la conversion a réussi
Guido Bouman
la source
Veuillez expliquer votre commande un peu mieux étape par étape.
derHugo
Que voudriez-vous savoir? Il y a un résumé de ce que fait la commande juste en dessous.
Guido Bouman
0

il y a déjà une réponse à ce sujet Comment convertir un fichier .mkv en fichier .mp4 sans perte?

le concept de base est que le MKV et le MP4 sont des conteneurs, ce ne sont que des conteneurs, vous devez essentiellement déballer et reconditionner les pistes audio et vidéo si vous souhaitez basculer entre les deux.

user827992
la source
J'ai lu cela, mais j'essaie d'apprendre à le faire avec ffmpeg au lieu de ces autres outils. J'utilise le frein à main tout le temps, mais cela ne m'aide pas à comprendre comment le faire dans ffmpeg. J'essaye juste d'apprendre quelque chose de nouveau.
JohnS
@JohnS ffmpeg n'est probablement pas le meilleur choix, car il essaie toujours de tout réencoder et vous perdez du temps et des ressources à le faire, de toute façon forum.doom9.org/showthread.php?t=164683 cela peut probablement devenir un bon point de départ pour vous.
user827992
3
@ user827992 C'est incorrect. ffmpeg n'essaie pas toujours de tout ré-encoder. Avez-vous même lu les détails de la question? L'exemple de la question tente clairement de copier les flux, pas de ré-encoder.
llogan
2
@ user827992: ffmpeg et avconv sont capables de reconditionner sans perte d'un conteneur à un autre sans reconduire le contenu.
MestreLion
0

Essayez celui-ci :: Libav sous Linux

Installation: exécuter la commande

sudo apt-get install libav-tools

Commande de conversion vidéo :: Aller au dossier contient la vidéo et exécuter dans le terminal

avconv -i oldvideo.mkv -ar 22050 convertedvideo.mp4
Vishal
la source