2013-07-29 14 views
8

Ho provato a google un modo per impostare la lingua di un flusso di sottotitoli con ffmpeg e ho trovato l'opzione -slang. Così ho provato il seguente comando ma subito ricevo un errore:Impostare una lingua per i sottotitoli utilizzando 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

Dopo più googling ho trovato un altro modo per farlo usando il comando -metadata:

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 

e che funziona assolutamente bene . Ma questo non è menzionato nella pagina man ffmpeg, mentre -slang è, il che mi fa pensare che il comando -metadata sia forse obsoleto o in qualche altro modo non buono come -slang.

  1. Qual è la differenza tra l'utilizzo dei due metodi precedenti (-slang vs -metadata)?
  2. Perché il comando my -slang ha restituito un errore? L'ho usato in modo errato?
+1

si dovrebbe includere l'uscita della console competere ffmpeg per ognuno dei vostri comandi ffmpeg. – LordNeckbeard

risposta

3

Dopo alcune ricerche, ho trovato il motivo per cui -slang non ha funzionato. In realtà si utilizza una versione recente di ffmpeg ed è una buona cosa, ma se the documentation ancora descrivono l'opzione, è possibile trovare nella 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. 

Quando si trova un esempio di riga di comando, controllare se l'opzione utilizzati sono nella tua versione di ffmpeg.

ffmpeg --help >> ffmpeg-doc.txt 

L'opzione -slang non è.

Ma è anche la prova che la documentazione on-line su FFmpeg è a volte non corretta per quanto riguarda la modifica del codice.

+1

Grazie per averlo chiarito. Qualche idea sul perché questo comando di metadati sembra indicizzare i flussi da 1 mentre quando si mappano i flussi e si eseguono altre azioni, gli stream sono indicizzati da zero? Avrei pensato '-metadata: s: 1 language = eng' avrebbe impostato il secondo stream in inglese e per impostare il primo stream si usava' -metadata: s: 0 language = eng'. qualche idea? – Sam

+0

Non ho idea dello strano indice di metadati a partire da 1. – alexbuisson

+1

Questa indicizzazione * è * coerente con il resto dell'indicizzazione. Tutto inizia da 0 (programmatori, sospiro ...). In questo caso, lo stream 0 è il flusso video (questo è sempre il caso di MP4?).Quindi, si specifica il primo audio come '-metadata: s: 1' (il 2o stream nel file) o più correttamente come' -metadata: s: a: 0' (il primo * flusso audio * nel file) . – jimtut

6

L'opzione

-metadata:s:1 language=eng

lingua set di metadati all'Ing sul torrente ID 1 (che è, nei casi tipici, la prima audio Stream). Mentre l'opzione

-metadata:s:s:0 language=eng
imposta la lingua dei metadati per attivare il primo flusso di sottotitoli.

Da 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.

E infine dal capitello di prescrittori flusso, vediamo

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.
Problemi correlati