Конвертировать mkv в mp4 с помощью ffmpeg

13

Когда я пытаюсь преобразовать mkv в mp4 с помощью ffmpeg, возникает следующая ошибка:

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

Я использовал эту команду для преобразования файла:

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

Входной файл имеет следующие характеристики:

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, я не уверен, что означает ошибка или как ее исправить.

Благодарность!

JohnS
источник
Также включите полный вывод консоли ffmpeg, полученный в результате выполнения команды ffmpeg.
Llogan
Извините за форматирование кода; цитирование затруднило мне редактирование ...
Восстановить Монику - ζ--

Ответы:

22

Как я уже писал здесь , я предлагаю вам изменить некоторые детали в командной строке:

  • Если вы используете релиз Ubuntu старше 15.04, заменить ffmpegна avconv, как это было вилка используется Ubuntu в течение нескольких лет (см комментариев)
  • Вам действительно нужно -absf aac_adtstoasc? У него были некоторые проблемы, которые, возможно, не были исправлены в текущей ffmpeg Ubuntu. Я предлагаю вам попробовать без этого в первую очередь.
  • -vcodec copy -acodec copyможно упростить до -codec copyили -c copy. Это также предотвратит изменение других потоков, помимо видео и аудио, например субтитров.

Итак, победитель ...

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

Если это не работает, пожалуйста, опубликуйте все выходные данные терминала.

MestreLion
источник
-1. я получаю ту же ошибку с командной строкой, которую вы указали. кажется, ты просто педантичен здесь.
ixtmixilix
@ixtmixilix: хотите опубликовать вывод терминала? Вы avconvверсия «s может отличаться от моего.
МестреЛион
@ixtmixilix: также, почему педантичный? Я предложил ему альтернативу, которую стоит попробовать, и стал ждать отзывов. Нет смысла опровергать этот и другой ответ (который, между прочим, отлично решил вопрос ОП)
MestreLion
Теперь avconvбольше не поддерживается в Ubuntu :-)
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 вау, правда? Мы вернулись к ffmpeg? Есть какие-либо источники или ссылки на изменения?
МестреЛион
3

Я знаю, что это очень старая тема, но я нашел решение для успешного запуска ffmpeg. Не используйте -vcodec copy -acodec copy, используйте только ffmpeg -i input.mkv output.m4vвместо этого. Это начнет работать.

Но в моем случае я конвертирую .mkv в .mp4, в результате получается просто мусор. Это теряет точность кадра.

Анонимная мышь
источник
5
Если вы не используете copyкодек, он перекодирует и теряет качество.
nyuszika7h
2

Чтобы автоматически преобразовать все файлы в папке из MKV в MP4, вы можете создать псевдоним:

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

Эта команда выполняет следующие шаги:

  • Рекурсивно перебирает текущий каталог в поисках файлов .mkv
  • Конвертирует каждый файл в .mp4, не перезаписывая существующие файлы
  • Удаляет исходный файл при успешном преобразовании
Гидо Боуман
источник
Пожалуйста, объясните вашу команду немного лучше, шаг за шагом.
derHugo
Что бы вы хотели узнать? Ниже приведено краткое описание того, что команда делает.
Гвидо Боуман
0

Ответ на этот вопрос уже есть Как конвертировать файл .mkv в файл .mp4 без потерь?

Основная концепция заключается в том, что оба MKV и MP4 являются контейнерами, они просто контейнеры, вам нужно распаковать и перепаковать аудио и видео дорожки, если вы хотите переключиться между ними.

user827992
источник
Я читал это, но я пытаюсь научиться делать это с помощью ffmpeg вместо других инструментов. Я постоянно пользуюсь ручным тормозом, но это не помогает мне понять, как это сделать в ffmpeg. Просто пытаюсь узнать что-то новое.
JohnS
@JohnS ffmpeg, вероятно, не лучший выбор, потому что он всегда пытается все перекодировать, а вы тратите на это время и ресурсы, в любом случае forum.doom9.org/showthread.php?t=164683 это, вероятно, может стать хорошей отправной точкой для вас.
user827992
3
@ user827992 Это неверно. ffmpeg не всегда пытается все перекодировать. Вы даже читали детали в вопросе? Пример в вопросе явно пытается скопировать потоки, а не перекодировать.
Llogan
2
@ user827992: и ffmpeg, и avconv могут без потерь переупаковывать данные из контейнера в другой без повторного добавления содержимого.
МестреЛион
0

Получил это на Xubuntu 14.04 при попытке записать DVD с MP4, используя DVDStyler; Бомбоно выдает ту же ошибку. ffmpeg # 1154 предполагает, что это могло быть исправлено в ffmpeg, хотя, возможно, не в avconv? libav # 478 по-прежнему помечен как открытый.

Также см .: /unix/127522/avconv-error-av-interleaved-write-frame

Я подал Launchpad # 1339980 ; Таким образом, используйте текущий выпуск ffmpeg, а не avconv.

Джесси Глик
источник
0

Попробуйте это :: Libav в Linux

Установка: запустить команду

sudo apt-get install libav-tools

Команда преобразования видео :: Перейти в папку, содержащую видео и запустить в терминале

avconv -i oldvideo.mkv -ar 22050 convertedvideo.mp4
Вишал
источник