Chciałbym zmienić kodek audio, ale zachowaj ustawienia wideo za pomocą ffmpeg

27

Mam wideo, dla którego chciałbym przekonwertować kodek audio na AAC 320 kb / s / 44,100 kHz. Czego mógłbym użyć do przełączników ffmpeg, aby wszystkie ustawienia wideo i kodek pozostały takie same, ale zmieniły się tylko kodek i ustawienia audio?

Oto mój film:

$ ffmpeg -i Winnipeg.rb\ Scala-Talk.mov 
FFmpeg version SVN-r25375, Copyright (c) 2000-2010 the FFmpeg developers
  built on Oct  6 2010 13:02:41 with gcc 4.2.1 (Apple Inc. build 5664)
  configuration: --enable-libmp3lame --enable-shared --disable-mmx --arch=x86_64
  libavutil     50.32. 2 / 50.32. 2
  libavcore      0. 9. 1 /  0. 9. 1
  libavcodec    52.92. 0 / 52.92. 0
  libavformat   52.80. 0 / 52.80. 0
  libavdevice   52. 2. 2 / 52. 2. 2
  libavfilter    1.48. 0 /  1.48. 0
  libswscale     0.12. 0 /  0.12. 0

Seems stream 0 codec frame rate differs from container frame rate: 2000.00 (2000/1) -> 10.00 (10/1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Winnipeg.rb Scala-Talk.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
  Duration: 01:10:53.00, start: 0.000000, bitrate: 283 kb/s
    Stream #0.0(eng): Video: h264, yuv420p, 800x598, 94 kb/s, 10 fps, 10 tbr, 1k tbn, 2k tbc
    Stream #0.1(eng): Audio: adpcm_ima_qt, 22050 Hz, 1 channels, s16
    Stream #0.2(eng): Audio: adpcm_ima_qt, 22050 Hz, 1 channels, s16
At least one output file must be specified

Z góry bardzo dziękuję! Jedną rzeczą z ffmpeg, której nigdy nie byłem w stanie zrozumieć, jest po prostu „poprawianie” plików bez konieczności regurgitowania każdego małego ustawienia dla rzeczy, których nie chcesz zmieniać.

Craig Tataryn
źródło
Dźwięk (podobnie jak wideo) wydaje się być dość niskiej jakości. Zauważ, że tak naprawdę nie zwiększysz jakości dźwięku poprzez zmianę formatu, zwiększenie częstotliwości próbkowania i zwiększenie przepływności.
Force Flow

Odpowiedzi:

35

Agregacja odpowiedzi Ehsana z komentarzem Fletoma, która działa dla mnie dzięki obu.

ffmpeg -i input.avi -acodec mp3 -vcodec copy out.avi
igorushi
źródło
tylko dla odniesienia, ponieważ zawsze zapominam o tej -vcodec copyczęści
igorushi
2
Czy możesz trochę rozszerzyć swoją odpowiedź, aby ją wyjaśnić? Dzięki.
fixer1234
2
-i input.aviokreśla plik, który chcesz przekonwertować. out.avijest konwertowanym plikiem. -acodec mp3mówi, aby przekonwertować strumień audio na mp3 podczas zapisywania go do pliku wyjściowego. vcodec copymówi, aby po prostu skopiować strumień wideo do pliku wyjściowego bez zmiany.
Wodin
8

Trudno ocenić, co robisz, ponieważ polecenie ffmpeg było nieco zniekształcone w twoim poście.

Aby zastąpić ścieżkę audio:

ffmpeg -i test.avi -i normalized.mp3 -map 0:0 -map 1:0 -vcodec copy -acodec copy new_test.avi

Więcej informacji o powyższych parametrach można znaleźć w: Dokumentacji FFmpeg .

harrymc
źródło
1
Dzięki. To rozwiązało mój problem. Po uruchomieniu ffmpeg -i old.mkv -i onlySound.m4a out.mkvoperacja trwa znacznie dłużej. Dlaczego to takie soo?
Zeta.Investigator,
6

Jeśli chcesz tylko zmienić kodek (y) audio i / lub wideo, możesz po prostu dodać je jako parametry:

Po prostu zmień kodek audio na mp3 (czymkolwiek był oryginalny kodek)

ffmpeg -i input.avi -acodec mp3 out.avi

Wystarczy zmienić kodek wideo na h264

ffmpeg -i input.avi -vcodec h264 out.avi

Warto zauważyć, że ffmpeg musi obsługiwać kodowanie nowego kodeka. Zobacz /programming/3377300/what-are-all-codecs-supported-by-ffmpeg

Ehsan88
źródło
5
To działało dla mnie, ale musiałem dodać -vcodec copy, aby zapobiec próbie transkodowania mojego wideo na h.264. Nie wiem, dlaczego tak się stało.
fletom
-1

Dlaczego nie użyjesz hamulca ręcznego, który pozwala zachować wideo i zmienić dźwięk; jest to GUI dla FFmpeg i działa jak urok.

Benny
źródło
3
HandBrake nie może tego zrobić; potrafi wykonać prostą kopię strumieni audio lub napisów, ale zawsze ponownie koduje wideo.
evilsoup