Muszę zakodować krótki film w formacie, który można odtwarzać za pomocą Windows Media Player na Windows XP bez instalowania dodatkowych kodeków. Do procesu przekodowywania używam ffmpeg.
Próbowałem już tego msmpeg4v2
kodeka, ale jakość jest okropna (w porównaniu do oryginalnego wideo widać duże „bloki”), więc szukam innych kodeków, które działają od razu i mają co najmniej „ok” jakość.
Ponieważ komentarze wskazują, że może to nie być kodek, ale problem z przepływnością, oto polecenie, którego użyłem:
ffmpeg -i x.flv -vcodec msmpeg4v2 -acodec adpcm_ima_wav x.avi
Wynik:
Input #0, flv, from 'x.flv':
Metadata:
moovPosition : 39337765
avcprofile : 100
avclevel : 30
aacaot : 2
videoframerate : 25
audiochannels : 2
Duration: 00:06:19.52, start: 0.000000, bitrate: 836 kb/s
Stream #0:0: Video: h264 (High), yuv420p, 702x396 [SAR 2596:3679 DAR 354:283], 25 tbr, 1k tbn, 50 tbc
Stream #0:1: Audio: aac, 48000 Hz, stereo, s16
w:702 h:396 pixfmt:yuv420p tb:1/1000000 sar:2596/3679 sws_param:
Output #0, avi, to 'x.avi':
Metadata:
moovPosition : 39337765
avcprofile : 100
avclevel : 30
aacaot : 2
videoframerate : 25
audiochannels : 2
ISFT : Lavf53.32.100
Stream #0:0: Video: msmpeg4v2 (MP42 / 0x3234504D), yuv420p, 702x396 [SAR 2596:3679 DAR 354:283], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream #0:1: Audio: adpcm_ima_wav ([17][0][0][0] / 0x0011), 48000 Hz, stereo, s16, 384 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> msmpeg4v2)
Stream #0:1 -> #0:1 (aac -> adpcm_ima_wav)
Press [q] to stop, [?] for help
frame= 9485 fps=436 q=31.0 Lsize= 31197kB time=00:06:19.48 bitrate= 673.5kbits/s
video:12628kB audio:17913kB global headers:0kB muxing overhead 2.149820%
ffmpeg
codec
video-codecs
ThiefMaster
źródło
źródło
Odpowiedzi:
Ponieważ nie określisz nic innego, Twój strumień wideo jest gotowy do użycia
q=2-31, 200 kb/s
. Wynikiem jest673.5kbits
średnia, która nie jest duża, przynajmniej nie dla kodeków innych niż h.264.Spróbuj wymusić
-b:v 1000K
na przykład pewien bitrate . W starszych wersjach FFmpeg można używać tylko-b
.-qscale 2
. Tutaj wartość może wynosić od 1 do 31. Wartości rozsądne dlaqscale
są w zakresie od 2 do 5 lub więcej. Po prostu spróbuj i zobacz, co osiąga najlepszy wynik.Kodeki, które naprawdę są domyślnie obsługiwane w systemie Windows, to :
Aby uzyskać więcej informacji, zobacz także typy plików multimedialnych obsługiwane przez program Windows Media Player .
Z FFmpeg możesz wypróbować
mpeg1video
(MPEG-1) lubmpeg2video
(MPEG-2) lubmsmpeg4
(MPEG-4 Part II), ale nie jestem pewien, czy ten ostatni jest nawet powszechnie obsługiwany. Jeśli chcesz grać bezpiecznie, musisz użyć MPEG-1 lub MPEG-2.źródło
Miałem podobny problem z plikiem aac / h264 .mp4, który oryginalnie grał dobrze w Windows Media Player (Windows 7). Po edycji w VirtualDub i zapisaniu w formacie .avi, a następnie konwersji z powrotem do formatu aac / h264 .mp4 przy użyciu ustawień domyślnych ffmpeg, nie będzie już odtwarzany w programie Windows Media Player.
Za pomocą MediaInfo do porównania plików oryginalnych i końcowych zauważyłem, że zastosowano inny profil kodowania i różne ustawienia podpróbkowania kolorów (4: 2: 0, końcowe 4: 4: 4). Przekodowując go za pomocą ffmpeg przy użyciu następującej opcji, WMP mógł poprawnie odtworzyć plik:
źródło
-pix_fmt yuv420p
i wsparciu tego pomysłu.-pix_fmt yuv420p
byłem w stanie otworzyć mp4 w aplikacjach Microsoft (zarówno wbudowany odtwarzacz, jak i Movie Maker).FFMPEG wiki zaleca następujące :
źródło
Ponieważ oba kodeki są już obsługiwane przez kontener AVI, możesz to zrobić
zakładając, że twój XP obsługuje h.264, w przeciwnym razie wybrałbym plik wmv, ten sam kwantyzator i pozwoliłbym ffmpeg wypełnić kodeki. To powinno dać ci prawie identyczną jakość jak oryginał:
źródło
-sameq
nie należy używać do konwersji formatów, które nie mają podobnej skali kwantyzatora. Ta opcja nie oznacza „tej samej jakości”, co sugerowana dokumentacja. Również H.264 w AVI nie jest zalecany (chociaż bezstratny H.264 [bez ramek b] powinien być w porządku).