使用 ffmpeg 添加流而不创建新文件

Sam*_*Sam 6 ffmpeg subtitles

我有一些视频 (.mp4) 被标记为元数据(描述、艺术作品、演员等),现在我有字幕文件,我想将它们添加为流。

我可以使用ffmpeg并将视频和.srt文件都设置为输入并获得一个新的输出文件,但输出似乎总是丢失所有容器级元数据,有时总是返回并删除原始文件会很烦人。

有没有办法可以将字幕文件作为新流添加到视频文件中而无需创建新文件?仅仅通过修改原始视频文件?

像 Subler 这样的程序似乎可以这样做,但是出于兴趣,它可以从命令行完成吗?

slh*_*hck 8

您不能就地编辑文件ffmpeg——它总是需要创建一个新的输出文件。我认为这是几乎所有程序的默认设置,并且在许多情况下,输出文件需要在编写过程中可由程序查找和编辑。*

如果真正的问题是您丢失了元数据,请尝试:

ffmpeg -i input.mp4 -i subtitles.srt \
-c copy -c:s mov_text \
-map 0 -map 1 -map_metadata 0 output.mp4
Run Code Online (Sandbox Code Playgroud)

你需要有ffmpeg转换SRT(SubRip格式)到兼容的MP4,字幕-c:s mov_text,否则ffmpeg拒绝将流过复制。**

-map_metadata选项应将所有全局元数据从输入 MP4 文件复制到输出,即您在容器级别设置的任何内容。比特流级元数据应自动复制,无需任何其他选项。

* 当然,spongemoreutils 之类的程序可以“吸收”输入并就地覆盖文件,但这仅适用于支持不可搜索输出的多路复用器,因此不适用于 MP4。
**mov_text编码字幕和 QuickTime 播放器存在问题,请参阅FFmpeg 票 #1845#2488