我有一些已用元数据(描述、艺术作品、演员等)标记的视频(.mp4),现在我有想要作为流添加的字幕文件。
我可以使用ffmpeg
和设置视频和.srt
文件作为输入并获得一个新的输出文件,但输出似乎总是丢失所有的容器级元数据,有时总是返回并删除原始文件会很烦人。
有没有办法可以将字幕文件作为新流添加到视频文件中而无需创建新文件?只需修改原始视频文件即可?
Subler 之类的程序似乎可以做到这一点,但出于兴趣,可以从命令行完成吗?
答案1
您无法使用 来就地编辑文件ffmpeg
– 它总是需要创建一个新的输出文件。我认为这是几乎所有程序的默认设置,并且在许多情况下,输出文件需要在写入过程中可供程序查找和编辑。*
如果真实的问题是您丢失了元数据,请尝试:
ffmpeg -i input.mp4 -i subtitles.srt \
-c copy -c:s mov_text \
-map 0 -map 1 -map_metadata 0 output.mp4
您需要将ffmpeg
SRT (SubRip) 转换为兼容 MP4 的字幕使用-c:s mov_text
,否则ffmpeg
拒绝复制流。**
该-map_metadata
选项应将所有全局元数据从输入 MP4 文件复制到输出,即您在容器级别设置的任何内容。比特流级元数据应自动复制,无需任何其他选项。
* 当然,像sponge
来自 moreutils可以“吸收”输入并就地覆盖文件,但这只适用于支持不可搜索输出的复用器,因此不适用于 MP4。 **编码字幕和 QuickTime 播放器
存在问题,请参阅mov_text
FFmpeg 票号 #1845并且#2488。