Jak przekonwertować MKV na AVI przy minimalnej stracie

23

Aby przekonwertować MKV na AVI, robię dwie rzeczy. Pierwszą rzeczą, którą robię, jest:

ffmpeg -i filename.mkv -vcodec copy -acodec copy output.avi

albo to:

ffmpeg -i filename.mkv -sameq -acodec copy output.avi

Oba z nich przekonwertują MKV na AVI, ale problem polega na tym, że wideo z jakiegoś powodu nie jest płynnie odtwarzane. W porządku, bo jeśli zrobię jeszcze jedną rzecz, zostanie to naprawione:

ffmpeg -i output.avi -vcodec mpeg4 -b 4000k -acodec mp2 -ab 320k converted.avi

Po zrobieniu tego plik jest odtwarzany bez problemu. Odniosłem sukces, robiąc to w ten sposób dla jednego pliku, ale potem wypróbowałem go na innym pliku i nastąpiła niewielka, ale zauważalna utrata jakości wideo. Oto wynik, który otrzymuję, wykonując drugi krok:

FFmpeg version 0.6.1, Copyright (c) 2000-2010 the FFmpeg developers
  built on Dec 29 2010 18:02:10 with gcc 4.2.1 (Apple Inc. build 5664)
  configuration: 
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0.11. 0 /  0.11. 0

Seems stream 0 codec frame rate differs from container frame rate: 359.00 (359/1) -> 29.92 (359/12)
Input #0, avi, from 'output.avi':
  Metadata:
    ISFT            : Lavf52.64.2
  Duration: 00:04:17.21, start: 0.000000, bitrate: 3074 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 704x480 [PAR 229:189 DAR 5038:2835], 29.92 fps, 29.92 tbr, 29.92 tbn, 359 tbc
    Stream #0.1: Audio: vorbis, 48000 Hz, stereo, s16
Output #0, avi, to 'converted.avi':
  Metadata:
    ISFT            : Lavf52.64.2
    Stream #0.0: Video: mpeg4, yuv420p, 704x480 [PAR 229:189 DAR 5038:2835], q=2-31, 4000 kb/s, 29.92 tbn, 29.92 tbc
    Stream #0.1: Audio: mp2, 48000 Hz, stereo, s16, 320 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1

Właśnie użyłem arbitralnie dużych ustawień na drugim etapie i działało to dobrze wcześniej, ale nie w tym przypadku. Jakich ustawień powinienem użyć?

tony_sid
źródło
Oto, co dał mi ffmpeg dla sameq: Opcja „sameq” została usunięta. Jeśli szukasz opcji zachowania jakości (która nie jest tym, do czego służyło -sameq), użyj opcji -qscale 0 lub równoważnej opcji współczynnika jakości.
DavidG

Odpowiedzi:

25

Aby po prostu skopiować strumień bitów wideo i audio, bez utraty jakości:

ffmpeg -i filename.mkv -c:v copy -c:a copy output.avi

Jeśli chcesz, aby FFmpeg automatycznie konwertował wideo i audio:

ffmpeg -i filename.mkv output.avi
RobotHumans
źródło
7
Domyślne ustawienia FFmpeg są zazwyczaj okropne. Oto ogólny przewodnik po kodowaniu za pomocą różnych kodeków; wiki FFmpeg ma bardziej szczegółowe przewodniki.
evilsoup
pierwszy plik utworzony kodem, który został uszkodzony, nie był odtwarzany w VLC.
codemirror
18
 ffmpeg -i "input.mkv" -f avi -c:v mpeg4 -b:v 4000k -c:a libmp3lame -b:a 320k "converted.avi"

Moja sugestia: użyj mpeg4 + mp3 w pojemniku avi.

Rozpoznać
źródło
1

Spróbuj użyć ffmulticonverter. Bardzo przydatne dla mnie: jest to rodzaj GUI dla ffmpeg i można łatwo ustawić wszystkie parametry. Ponadto można znaleźć listę wszystkich możliwych formatów wideo.

LP

użytkownik155915
źródło
-3

Czy mogę polecić skrót, którego używam regularnie?

ffmpeg -i filename.mkv -sameq output.avi
CarlF
źródło
4
sameqq nie oznacza tej samej jakości i nie należy go używać. W rzeczywistości został całkowicie usunięty z ffmpeg. Zamiast tego ustaw jakość za pomocą tego, co zapewnia docelowy kodek.
slhck