ffmpeg - 使用 ffmpeg 设置字幕语言

标签 ffmpeg subtitle

我尝试谷歌搜索一种使用 ffmpeg 设置字幕流语言的方法,并找到了 -slang 选项。所以我尝试了以下命令,但立即收到错误:

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

经过更多谷歌搜索后,我找到了另一种使用 -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

这绝对没问题。但是 ffmpeg 手册页中没有提到这一点,而 -slang 却提到了,这让我认为 -metadata 命令可能已经过时,或者在其他方面不如 -slang。

  1. 使用上述两种方法(-slang 与 -metadata)有什么区别?
  2. 为什么我的 -slang 命令出错?难道是我用错了?

最佳答案

选项

-metadata:s:1 language=eng

将元数据语言设置为 eng在流 id 1 上(在典型情况下,这是第一个音频流)。而选项

-metadata:s:s:0 language=eng

将元数据语言设置为 eng在第一个字幕流上。

来自 ffmpeg 手册页:

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

最后从流说明符的章节中,我们看到

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.

关于ffmpeg - 使用 ffmpeg 设置字幕语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17928192/

相关文章:

linux - 如何在 Openshift 中安装 FFMPEG?

ios - 在 iOS 中将字幕嵌入到视频文件中

javascript - Chart.js 副标题不会显示

java - 如何从纯 Java 中的 MKV 文件中提取字幕?

audio - 使用 ffmpeg 从视频中提取每个音频和字幕

ffmpeg - 合并文件时降低视频质量

ffmpeg - 如何使用 ffserver 为 iO 重新流式传输 rtsp h264 为 "live dvr"?

FFMPEG 流媒体错误 : Failed to update header with correct filesize and duration

iphone - 如何在 MPMoviePlayerController 中显示字幕

ffmpeg - 我想创建视频流媒体网站,但我想硬分的问题