因此,为了简化这个问题的主题,我使用了一个简单的命令,它只复制所有原始流并将其副本放入新的 mkv 容器中。
原始的 cover.png 流仍在新容器中。但是,虽然原始 mkv 文件的封面显示在 Windows 文件资源管理器中,但在 Windows 文件资源管理器中查看通过复制其流生成的新 mkv 文件时,不会显示其封面。
我不确定我是否做错了什么,或者这是 FFmpeg 部分的一个错误,或者这只是不可能的事情。我想到了一种绕过这个限制的方法,可以先将封面提取到单独的 png 文件中,然后将其作为新封面添加到新的 mkv 文件中。但是,只有在没有合适的方法直接复制封面时,我才会选择这种方法。
为了轻松复制问题,这里有两个不同的命令用于获取带有工作封面缩略图的 mkv 视频(其中一个使用 yt-dlp 和 FFmpeg,另一个仅使用 FFmpeg)。
yt-dlp.exe --embed-thumbnail --convert-thumbnails png --embed-metadata -o hasthumb.mkv URL
。
ffmpeg -i download.mkv -map 0:V -map 0:a -c copy -attach cover.png -disposition:v:1 attached_pic -metadata:s:2 mimetype=image/png hasthumb2.mkv
这是我用来将流复制到新的 mkv 文件中的命令,生成的文件的封面缩略图不起作用
ffmpeg -i hasthumb.mkv -map 0 -c copy output.mkv
在最后一个示例中,视频、音频和图像缩略图流都被复制,但缩略图并未显示在 Windows 文件资源管理器中
答案1
因此,虽然我还没有弄清楚如何正确地执行此操作,或者是否可以仅使用一个命令来完成此操作,但我已经弄清楚了如何使用两个命令分两个步骤来完成此操作
首先,我们从原始视频中提取图像:
ffmpeg -i video.mkv -map 0:v -map -0:V -c copy cover.png
然后,我们将其再次附加到视频中,并删除旧附加的图像:
ffmpeg -i video.mkv -map 0:V -map 0:a -c copy -attach cover.png -metadata:s:t mimetype=image/png newvideo.mkv
对于应该只是简单地复制和粘贴所有流的事情来说,这似乎还是有点太复杂了。因此,如果有人能找到更好的方法在一个命令行中完成它,我仍然会很感激。