首页 > 其他分享 >使用 ffmpeg 为视频文件添加封面

使用 ffmpeg 为视频文件添加封面

时间:2024-04-16 16:57:59浏览次数:17  
标签:文件 封面 ffmpeg map mp4 视频文件

全程使用 CHAT GPT4 提供帮助

通常而言,电脑上的资源管理器会使用视频的第一帧来作为缩略图,如果视频文件中有封面存在,则会使用封面作为文件缩略图(Windows 自带的资源管理器是这样,具体要看资源管理器的实现)

与 GPT4 沟通后,发现可以使用 ffmpeg 为视频添加封面。原理是为文件添加一个视频流,并标记为封面。

添加封面

ffmpeg -i input.mp4 -i cover.jpg -map 0 -map 1 -c copy -disposition:v:1 attached_pic output.mp4

这个ffmpeg命令用于将一张图片(cover.jpg)作为封面嵌入到一个MP4视频文件(input.mp4)中,并输出一个新的视频文件(output.mp4)。命令中的各个选项和参数含义如下:

ffmpeg: 这是命令行程序的名称,用于调用FFmpeg工具。
-i input.mp4: -i标志指定输入文件,这里input.mp4是第一个输入文件,即原视频文件。
-i cover.jpg: 再次使用-i标志添加第二个输入文件,这里cover.jpg是你想嵌入为封面的图片文件。
-map 0: -map选项用于手动选择输入流(视频、音频、字幕等)添加到输出文件中。0是一个索引号,指的是第一个-i参数指定的文件(即input.mp4)。这个选项指示FFmpeg将整个第一个输入文件的所有流(视频流、音频流等)复制到输出文件中。
-map 1: 同理,这里1指的是第二个输入文件,即cover.jpg。这个选项指示FFmpeg将图片作为一个单独的流添加到输出文件中。
-c copy: -c选项指定编解码器(codec)。这里使用copy来告诉FFmpeg对所有选定的流进行“直接复制”,即不要重新编码,保持原有格式和质量。这可以减少处理时间并避免质量损失。
-disposition:v:1 attached_pic: 这里的-disposition选项用于设置特定流的处置类型。v:1是一个流选择器,它指定要处理的是第二个视频流(在这个上下文中,是我们的封面图片)。attached_pic表示这个流应被视作附加的图片,通常用于封面或缩略图。
output.mp4: 指定输出文件的名字。

总结起来,这个命令告诉FFmpeg将input.mp4视频的所有流,以及cover.jpg图片作为封面,一起复制到output.mp4输出文件中,而不重新编码它们,并将封面图片设置为“附加图片”以供播放器识别。

移除已有封面

如果一个视频文件已经有了封面,则可能需要先移除原有封面。

如已经存在的文件的流是这样的

  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080, 5004 kb/s, 29.97 fps, 29.97 tbr, 29970 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 185 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:2[0x0]: Video: mjpeg (Baseline), yuvj444p(pc, bt470bg/unknown/unknown), 1280x857 [SAR 72:72 DAR 1280:857], 90k tbr, 90k tbn (attached pic)

要移除的其实就是第 3 个流

ffmpeg -i 1.mp4 -map 0 -map -0:2 -c copy output_nocover.mp4

-i 1.mp4:这是 input file 的标志,1.mp4 是要处理的视频文件名。
-map 0:这个选项告诉 ffmpeg 将输入文件 1.mp4 中的所有流(音频、视频、字幕等)都映射到输出文件。这里的 0 代表输入文件的索引号,通常情况下一个命令中只有一个输入文件,所以这里用 0 来表示它。
-map -0:2:这是一个排除特定流的选项。-map 选项之后的 - 符号表示排除操作。0:2 指代输入文件中的第三个流(流的索引从0开始计数),根据您提供的 ffmpeg -i 输出信息,这个流是封面图片。因此,这个选项告诉 ffmpeg 排除这个封面图片流,不将它映射到输出文件中。
-c copy:这个选项指示 ffmpeg 对所有被映射的流(即除了被排除的封面图片流之外的所有流)使用“复制”编解码器。这意味着 ffmpeg 不会对音频、视频进行重新编码,而是直接复制原始数据。这样可以加快处理速度,同时避免质量损失。
output_nocover.mp4:这是输出文件的名字,处理后的文件将不再包含原来的封面图像。

总结来说,这条命令的作用是复制 1.mp4 文件中的所有流到一个新的文件 output_nocover.mp4,但是排除了封面图像流。这样处理后的视频文件将保留原有的视频和音频流,但不包括封面图像。

附查看文件中流信息的命令

ffprobe -i input.mp4 -hide_banner

标签:文件,封面,ffmpeg,map,mp4,视频文件
From: https://www.cnblogs.com/jasongrass/p/18138596

相关文章

  • Java使用javacv处理视频文件过程记录
    最近接到一个需求是将.mp4/.m4v文件体积进行压缩,我使用javacv中的FFmpegFrameGrabber、FFmpegFrameFilter、FFmpegFrameRecorder简单的实现视频帧的抓取、过滤、录制与输出。性能暂未验证。文章对这次的过程进行记录。1.jdk的选择mcr.microsoft.com/java/jdk:8u222-zulu-cento......
  • FFmpeg开发笔记(十四)FFmpeg音频重采样的缓存
    ​FFmpeg在很多地方都运用了缓存机制,比如《FFmpeg开发实战:从零基础到短视频上线》一书的“3.3.2 对视频流重新编码”介绍了编解码的数据缓存,不单是视频编码过程和视频解码过程有缓存,甚至连音频重采样都用到了缓存。也就是说,重采样函数swr_convert一次只会输出指定长度的音频数......
  • simple_ffmpeg_decoder(ffmpeg的解码器)
    代码#include<stdio.h>#define__STDC_CONSTANT_MACROS//因为ffmpeg是C语言编写的所以要继承C语言的语法格式extern"C"{#include"libavcodec/avcodec.h"#include"libavformat/avformat.h"#include"libswscale/swscale.h"};intmain(i......
  • FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
    ​MP4是最常见的视频封装格式,在《FFmpeg开发实战:从零基础到短视频上线》一书的“1.2.3 自行编译与安装FFmpeg”介绍了如何给FFmpeg集成x264和x265两个库,从而支持H.264和H.265两种标准的编解码。视频的封装格式除了悠久的MP4和ASF之外,还有较新的WebM格式,该格式的音频编码主要采......
  • 使用GDB调试-封面&目录
    封面英文名:DebuggingwithGDBGNU源码级别调试器第9版,对应GDB版本7.0.50.20100218-cvs对应G++版本G++Lite2010q1-188原作者RichardStallmanRolandPeschStanShebs,etal.目录GDB总结免费软件免费软件需要免费文档为GDB贡献1GDB会话样例2进入和退出GDB2.......
  • 视频处理的利器,ffmpeg-python库详解与应用示例
    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取python编程资料在数字媒体的时代,视频处理成为了一项重要的技能。无论是剪辑、转码、还是添加特效,都需要强大的工具来处理视频素材。Python作为一门功能强大的编程语言,在视频处理领域也有着广......
  • centos7中ffmpeg的安装方法
    Linux系统安装ffmpeg&升级ffmpeg一、介绍多媒体视频处理工具FFmpeg有非常强大的功能,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。由于最近要处理音视频格式转换问题,因此需要安装、升级ffmpeg,下面来记录一下踩坑过程。 二、安装ffmpeg1、下载并解压ffmpeg......
  • FFmpeg常用功能
    1.转码视频格式:ffmpeg-iinput.mp4output.avi上述命令将输入的MP4视频文件转换为AVI格式。2.压缩视频文件:ffmpeg-iinput.mp4-vcodeclibx264-crf23output.mp4 该命令使用libx264视频编解码器对输入的MP4文件进行压缩,并将压缩后的视频保存为MP4格式。CRF值(Cons......
  • 断点续传-视频文件的分块和合并
    目录一,前言二,断点续传三,断点续传流程:四,java代码测试分块和合并视频文件分块: 视频文件合并:五,应用(简单了解)一,前言通常视频文件都比较大,项目中需要满足大文件的上传要求,http协议本身对上传文件大小没有限制,但是客户的网络质量,电脑硬件环境等参差不齐,如果一个大的......
  • 基于 FFmpeg 的自定义 Media Extractor(2):自定义 Extractor 的实现方法
    文章目录前言C/NDKAPI简介C++API简介实现自定义Extractor编译自定义Extractor参考资料前言在上一篇文章中,简要介绍了Extractor组件选择及创建过程。本文将继续基于Android11探索自定义Extractor的实现,及其接入到Android多媒体框架中的方法。C/NDKA......