2013-07-29 29 views
8

Próbowałem googling, aby ustawić język strumienia napisów za pomocą ffmpeg i znalazłem opcję -slang. Tak próbowałem następujące polecenie, ale natychmiast pojawi się błąd:Ustawianie języka napisów przy użyciu ffmpeg

ffmpeg -i input.avi -i subs.srt -c:a copy -c:s mov_text -slang eng -c:v libx264 -profile:v high -level:v 4.0 output.mp4 
ffmpeg version 1.1 Copyright (c) 2000-2013 the FFmpeg developers 
built on Jul 18 2013 23:00:53 with Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn) 

libavutil 52. 13.100/52. 13.100

libavcodec 54. 86.100/54. 86.100

libavformat 54. 59.106/54. 59.106

libavdevice 54. 3.102/54. 3.102

libavfilter 3. 32.100/3. 32.100

libswscale 2. 1.103/2. 1.103

libswresample 0. 17.102/0. 17.102

libpostproc 52. 2.100/52. 2.100

Unrecognized option 'slang'.

Error splitting the argument list: Option not found

Po więcej googlowania znalazłem inny sposób to zrobić przy użyciu -metadata polecenie:

ffmpeg -i input.mp4 -i subs.srt -c:a copy -c:v copy -c:s mov_text -metadata:s:s:0 language=eng output.mp4 

i że działa całkowicie w porządku . Ale nie jest to wspomniane na stronie man ffmpeg, podczas gdy -slang jest, co powoduje, że wydaje mi się, że polecenie -metadata jest nieaktualne lub w inny sposób nie tak dobre jak -slang.

  1. Jaka jest różnica między dwoma metodami (-slang vs -metadata)?
  2. Dlaczego polecenie my -slang spowodowało błąd? Czy użyłem go niepoprawnie?
+1

Należy załączyć wyjście konsoli konkurowania ffmpeg dla każdej z komend ffmpeg. – LordNeckbeard

Odpowiedz

3

Po przeprowadzeniu badań odkrył on powód, dlaczego funkcja -sang nie zadziałała. W rzeczywistości używasz najnowszej wersji ffmpeg i jest to dobra rzecz, ale jeśli the documentation jeszcze opisać opcję można znaleźć w ChangeLog:

version 0.9: 
... 
* -metadata can now be used to set metadata on streams and chapters, e.g. 
     -metadata:s:1 language=eng sets the language of the first stream to 'eng'. 
     This made -vlang/-alang/-slang options redundant, so they were removed. 

Po znalezieniu przykład wiersza polecenia, należy sprawdzić, czy opcja wykorzystywane są w Twojej wersji ffmpeg.

ffmpeg --help >> ffmpeg-doc.txt 

Opcja -slang nie jest.

Ale to także dowód, że dokumentacja on-line o ffmpeg jest jakiś niepoprawny dotyczące zmiany kodu.

+1

Dzięki za wyczyszczenie tego. Każdy pomysł, dlaczego to polecenie metadanych wydaje się indeksować strumienie od 1, podczas gdy podczas mapowania strumieni i wykonywania innych akcji, strumienie są indeksowane od zera? Myślałem, że '-metadata: s: 1 language = eng' ustawi drugi strumień na angielski i ustawi pierwszy strumień, którego użyjesz' -metadata: s: 0 language = eng'. jakieś pomysły? – Sam

+0

Nie mam pojęcia o dziwnym indeksie metadanych zaczynającym się od 1. – alexbuisson

+1

Ten indeks * jest * zgodny z resztą indeksowania. Wszystko zaczyna się od 0 (programiści, westchnienie ...). W tym przypadku strumień 0 jest strumieniem wideo (tak jest zawsze w przypadku MP4?).Określasz więc pierwszy dźwięk jako '-metadata: s: 1' (drugi strumień w pliku) lub bardziej poprawnie jako' -metadata: s: a: 0' (pierwszy * strumień audio * w pliku) . – jimtut

6

Opcja

-metadata:s:1 language=eng

język metadanych zestawy do pol o identyfikator strumienia 1 (która w typowych przypadkach, pierwszy strumień audio ). Opcja

-metadata:s:s:0 language=eng
ustawia język metadanych na pierwszy strumień napisów.

Od ffmpeg manpage:

-metadata[:metadata_specifier] key=value (output,per-metadata) Set a metadata key/value pair. An optional metadata_specifier may be given to set metadata on streams or chapters. See "-map_metadata" documentation for details.
s[:stream_spec] per-stream metadata. stream_spec is a stream specifier as described in the Stream specifiers chapter. In an input metadata specifier, the first matching stream is copied from. In an output metadata specifier, all matching streams are copied to.

I wreszcie od gałki z specyfikatorami strumienia widzimy

Possible forms of stream specifiers are: stream_index Matches the stream with this index. E.g. "-threads:1 4" would set the thread count for the second stream to 4. stream_type[:stream_index] stream_type is one of: 'v' for video, 'a' for audio, 's' for subtitle, 'd' for data and 't' for attachments. If stream_index is given, then matches stream number stream_index of this type. Otherwise matches all streams of this type.