aiastia / note

笔记
16 stars 5 forks source link

ffmpeg 处理视频 #74

Open aiastia opened 1 year ago

aiastia commented 1 year ago

ffmpeg -i "C:\Users\Desktop\新建文件夹 (7)\DJI_0092.MP4" -c copy -map 0 -reset_timestamps 1 -segmenttime 60 -f segment output%03d.MP4

这是因为像视频这样的媒体通常是通过有效的差异编码技术进行压缩的,该技术仅将视频中发生更改的部分保存为帧,而不是每个帧的所有像素数据。

当您将视频分成域值时,您通常遵循关键帧(I- 帧)的规则, 这些规则确保每个切割的片段都以I帧开头,因为I帧是关键帧,可以独立显示,因此I帧之间的B帧和P帧可以更轻松地进行解码。

在视频的其他部分中,当用于压缩视频的算法以帧差异的形式工作时,前导空白通常被包含在前一个I帧切割视频段的末尾和下一个I帧切割视频段的开头(因为它是从先前的帧中派生出来的)。因此,当您在第二段视频中开始播放时,您可能会看到空闲时间,这是因为之前的部分被包含在第一个视频片段中。

要解决这个问题,您可以尝试在分割视频时使用参数 -reset_timestamps 1,该参数将重置时间戳,可能会解决该问题。您可以尝试使用以下命令运行 FFmpeg:

这是因为像视频这样的媒体通常是通过有效的差异编码技术进行压缩的,该技术仅将视频中发生更改的部分保存为帧,而不是每个帧的所有像素数据。

当您将视频分成域值时,您通常遵循关键帧(I- 帧)的规则, 这些规则确保每个切割的片段都以I帧开头,因为I帧是关键帧,可以独立显示,因此I帧之间的B帧和P帧可以更轻松地进行解码。

在视频的其他部分中,当用于压缩视频的算法以帧差异的形式工作时,前导空白通常被包含在前一个I帧切割视频段的末尾和下一个I帧切割视频段的开头(因为它是从先前的帧中派生出来的)。因此,当您在第二段视频中开始播放时,您可能会看到空闲时间,这是因为之前的部分被包含在第一个视频片段中。

要解决这个问题,您可以尝试在分割视频时使用参数 -reset_timestamps 1,该参数将重置时间戳,可能会解决该问题。您可以尝试使用以下命令运行 FFmpeg:

ffmpeg -i "C:\Users\qamar\Desktop\新建文件夹 (7)\DJI_0092.MP4" -c copy -map 0 -reset_timestamps 1 -segmenttime 60 -f segment output%03d.MP4 请注意,这种方法会重置时间戳,可能会对部分视频的编辑和处理产生影响,请根据自己的需求谨慎使用。

aiastia commented 1 year ago
ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
很乐意!这里是您需要的选项的翻译: 

--enable-gpl:启用GPL许可证。  
--enable-version3:启用版本3协议。  
--enable-static:启用静态生成。  
--disable-w32threads:禁用Win32线程。  
--disable-autodetect:禁用自动检测。  
--enable-fontconfig:启用字体配置。  
--enable-iconv:启用字符集转换库。  
--enable-gnutls:启用加密库。  
--enable-libxml2:启用XML库。  
--enable-gmp:启用GMPlib库。  
--enable-bzlib:启用bzip2库。  
--enable-lzma: 启用lzma库。   
--enable-libsnappy:启用snappy压缩库。  
--enable-zlib:启用zlib库。  
--enable-librist:启用rist协议库。  
--enable-libsrt:启用srt协议库。  
--enable-libssh:启用libssh2库。  
--enable-libzmq:启用ZeroMQ库。  
--enable-avisynth:启用Avisynth脚本处理。  
--enable-libbluray:启用Blu-Ray解析。  
--enable-libcaca:启用caca帧缓冲库。  
--enable-sdl2:启用SDL2库,以用于图形窗口显示。  
--enable-libaribb24:启用ARIB STD-B24字幕解析库。  
--enable-libdav1d:启用dav1d解码器库。  
--enable-libdavs2:启用davs2解码器库。  
--enable-libuavs3d:启用uavs3d解码器库。  
--enable-libzvbi:启用zvbi解码器库。  
--enable-librav1e:启用AV1编码器。  
--enable-libsvtav1:启用SVT-AV1编码器库。  
--enable-libwebp:启用编码和解码WebP图像格式的库。  
--enable-libx264:启用x264编解码器库。  
--enable-libx265:启用x265编解码器库。  
--enable-libxavs2:启用AVS2编解码器库。  
--enable-libxvid:启用Xvid编解码器库。  
--enable-libaom:启用AOM AV1编解码器库。  
--enable-libjxl:启用JPEG-XL编解码器库。  
--enable-libopenjpeg:启用OpenJPEG库,以支持JPEG 2000格式。  
--enable-libvpx:启用VP8/VP9编解码器库。  
--enable-mediafoundation:启用Windows Media Foundation支持。  
--enable-libass:启用字幕文件处理的库。  
--enable-frei0r:启用frei0r效果处理插件,以便将filtergraph中的效果应用于视频。  
--enable-libfreetype:启用处理文本字幕的freetype库。  
--enable-libfribidi:启用处理双向文本的fribidi库。  
--enable-liblensfun:启用处理图像畸变和校正的lensfun库。  
--enable-libvidstab:启用用于视频稳定化的vid.stab库。  
--enable-libvmaf:启用libvmaf库以进行视频质量分析。  
--enable-libzimg:启用z.lib库以进行图像缩放和处理。  
--enable-amf:启用AMD AMF编码器/解码器。  
--enable-cuda-llvm:启用CUDA编码器/解码器,使用LLVM作为后端。  
--enable-cuvid:启用CUDA解码器。  
--enable-ffnvcodec:启用Nvidia GPU硬件编解码器。  
--enable-nvdec:启用Nvidia解码器。  
--enable-nvenc:启用Nvidia编码器。  
--enable-d3d11va:启用Windows Direct3D 11加速视频解码。  
--enable-dxva2:启用Windows DirectX视频加速。  
--enable-libvpl:启用Intel Media SDK加速编解码器。  
--enable-libshaderc:启用用于OpenGL显卡的shaderc库。  
--enable-vulkan:启用Vulkan API支持。  
--enable-libplacebo:启用libplacebo,这是一个图像处理库。  
--enable-opencl:启用OpenCL运行时支持。  
--enable-libcdio:启用CD解析库,以支持光盘。  
--enable-libgme:启用libgme库以支持游戏音乐文件。  
--enable-libmodplug:启用插件插入功能以支持ModPlug音乐文件。  
--enable-libopenmpt:启用插件插入功能以支持OpenMPT音乐文件。  
--enable-libopencore-amrwb:启用opencore-amrwb编解码器库以支持AMR-WB Audio编解码。  
--enable-libmp3lame:启用MP3编码器的libmp3lame库。  
--enable-libshine:启用启用MP3编码器的libshine库。  
--enable-libtheora:启用Theora视频编码器库。  
--enable-libtwolame:启用libtwolame库,以支持MPEG Audio Layer II编码器。  
--enable-libvo-amrwbenc:启用vo-amrwbenc编码器库,以支持AMR-WB Audio编码。  
--enable-libilbc:启用iLBC编码器/解码器库,用于提供实
aiastia commented 1 year ago

Print help / information / capabilities:
-L                  show license
-h topic            show help
-? topic            show help
-help topic         show help
--help topic        show help
-version            show version
-buildconf          show build configuration
-formats            show available formats
-muxers             show available muxers
-demuxers           show available demuxers
-devices            show available devices
-codecs             show available codecs
-decoders           show available decoders
-encoders           show available encoders
-bsfs               show available bit stream filters
-protocols          show available protocols
-filters            show available filters
-pix_fmts           show available pixel formats
-layouts            show standard channel layouts
-sample_fmts        show available audio sample formats
-dispositions       show available stream dispositions
-colors             show available color names
-sources device     list sources of the input device
-sinks device       list sinks of the output device
-hwaccels           show available HW acceleration methods
很高兴为您提供翻译,以下是相应选项的翻译:

-L:显示许可证信息
-h topic:显示特定话题的帮助
-? topic:显示特定话题的帮助
-help topic:显示特定话题的帮助
--help topic:显示特定话题的帮助
-version:显示版本信息
-buildconf:显示构建配置
-formats:显示可用格式
-muxers:显示可用的复用器
-demuxers:显示可用的解复用器
-devices:显示可用设备
-codecs:显示可用编解码器
-decoders:显示可用解码器
-encoders:显示可用编码器
-bsfs:显示可用的比特流过滤器
-protocols:显示可用协议
-filters:显示可用过滤器
-pix_fmts:显示可用的像素格式
-layouts:显示标准通道布局
-sample_fmts:显示可用的音频采样格式
-dispositions:显示可用的流分配
-colors:显示可用的颜色名称
-sources device:列出输入设备的源
-sinks device:列出输出设备的接收器
-hwaccels:显示可用的硬件加速方法
aiastia commented 1 year ago

Global options (affect whole program instead of just one file):
-loglevel loglevel  set logging level
-v loglevel         set logging level
-report             generate a report
-max_alloc bytes    set maximum size of a single allocated block
-y                  overwrite output files
-n                  never overwrite output files
-ignore_unknown     Ignore unknown stream types
-filter_threads     number of non-complex filter threads
-filter_complex_threads  number of threads for -filter_complex
-stats              print progress report during encoding
-max_error_rate maximum error rate  ratio of decoding errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success.

Per-file main options:
-f fmt              force format
-c codec            codec name
-codec codec        codec name
-pre preset         preset name
-map_metadata outfile[,metadata]:infile[,metadata]  set metadata information of outfile from infile
-t duration         record or transcode "duration" seconds of audio/video
-to time_stop       record or transcode stop time
-fs limit_size      set the limit file size in bytes
-ss time_off        set the start time offset
-sseof time_off     set the start time offset relative to EOF
-seek_timestamp     enable/disable seeking by timestamp with -ss
-timestamp time     set the recording timestamp ('now' to set the current time)
-metadata string=string  add metadata
-program title=string:st=number...  add program with specified streams
-target type        specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-")
-apad               audio pad
-frames number      set the number of frames to output
-filter filter_graph  set stream filtergraph
-filter_script filename  read stream filtergraph description from a file
-reinit_filter      reinit filtergraph on input parameter changes
-discard            discard
-disposition        disposition

Video options:
-vframes number     set the number of video frames to output
-r rate             set frame rate (Hz value, fraction or abbreviation)
-fpsmax rate        set max frame rate (Hz value, fraction or abbreviation)
-s size             set frame size (WxH or abbreviation)
-aspect aspect      set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-display_rotation angle  set pure counter-clockwise rotation in degrees for stream(s)
-display_hflip      set display horizontal flip for stream(s) (overrides any display rotation if it is not set)
-display_vflip      set display vertical flip for stream(s) (overrides any display rotation if it is not set)
-vn                 disable video
-vcodec codec       force video codec ('copy' to copy stream)
-timecode hh:mm:ss[:;.]ff  set initial TimeCode value.
-pass n             select the pass number (1 to 3)
-vf filter_graph    set video filters
-b bitrate          video bitrate (please use -b:v)
-dn                 disable data

Audio options:
-aframes number     set the number of audio frames to output
-aq quality         set audio quality (codec-specific)
-ar rate            set audio sampling rate (in Hz)
-ac channels        set number of audio channels
-an                 disable audio
-acodec codec       force audio codec ('copy' to copy stream)
-ab bitrate         audio bitrate (please use -b:a)
-af filter_graph    set audio filters

Subtitle options:
-s size             set frame size (WxH or abbreviation)
-sn                 disable subtitle
-scodec codec       force subtitle codec ('copy' to copy stream)
-stag fourcc/tag    force subtitle tag/fourcc
-fix_sub_duration   fix subtitles duration
-canvas_size size   set canvas size (WxH or abbreviation)
-spre preset        set the subtitle options to the indicated preset
很高兴为您提供翻译,以下是各选项的翻译:

全局选项(影响整个程序而非单个文件):
-loglevel loglevel:设置日志级别
-v loglevel:设置日志级别
-report:生成报告
-max_alloc bytes:设置单个分配块的最大大小
-y:覆盖输出文件
-n:不覆盖输出文件
-ignore_unknown:忽略未知流类型
-filter_threads:非复杂过滤器线程数
-filter_complex_threads:-filter_complex 的线程数
-stats:编码时输出进度报告
-max_error_rate maximum error rate:解码错误率的上限(0.0: 无误差,1.0: 100% 错误)。达到上限后,ffmpeg 返回错误而不是成功。

针对每个文件的主要选项:
-f fmt:强制格式
-c codec:编解码器名称
-codec codec:编解码器名称
-pre preset:预设名称
-map_metadata outfile[,metadata]:infile[,metadata]:从输入文件获取元数据信息并写入输出文件中
-t duration:录制或转码指定秒数的音频/视频
-to time_stop:转码停止时间
-fs limit_size:设置文件大小限制,以字节为单位
-ss time_off:设置开始时间偏移量
-sseof time_off:设置以 EOF 为参考点的开始时间偏移量
-seek_timestamp:启用/禁用按时间戳(-ss)搜索功能
-timestamp time:设置记录时间戳(使用'now'来设置当前时间)
-metadata string=string:添加元数据
-program title=string:st=number...:添加包含指定流的节目
-target type:指定目标文件类型(“vcd”,“svcd”,“dvd”,“dv”或“dv50”以及可选的前缀“pal-”,“ntsc-”或“film-”)
-apad:音频自适应
-frames number:设置输出帧数
-filter filter_graph:设置流过滤器图形
-filter_script filename:从文件中读取流过滤器图形描述
-reinit_filter:在输入参数更改时重新初始化过滤器图形
-discard:丢弃
-disposition:分配

视频选项:
-vframes number:设置要输出的视频帧数
-r rate:设置帧率(Hz值、分数或简称)
-fpsmax rate:设置最大帧率(Hz值、分数或简称)
-s size:设置帧大小(WxH或缩写形式)
-aspect aspect:设置宽高比(4:3、16:9或1.3333、1.7777)
-display_rotation angle:为流设置逆时针旋转度数
-display_hflip:为流设置水平翻转(如果未设置,则覆盖任何显示旋转)
-display_vflip:为流设置垂直翻转(如果未设置,则覆盖任何显示旋转)
-vn:禁用视频
-vcodec codec:强制使用特定视频编解码器('copy'表示复制流)
-timecode hh:mm:ss[:;.]ff:设置初始时间码值
-pass n:选择通道数(1到3)
-vf filter_graph:设置视频过滤器
-b bitrate:视频比特率(请使用 -b:v)
-dn:禁用数据

音频选项:
-aframes number:设置要输出的音频帧数
-aq quality:设置音频质量(编解码器特定)
-ar rate:设置音频采样率(以 Hz 为单位)
-ac channels:设置音频通道数
-an:禁用音频
-acodec codec:强制使用特定音频编解码器('copy'表示复制流)
-ab bitrate:音频比特率(请使用 -b:a)
-af filter_graph:设置音频过滤器

字幕选项:
-s size:设置帧大小(WxH或缩写形式)
-sn:禁用字幕
-scodec codec:强制使用特定字幕编解码器('copy'表示复制流)
-stag fourcc/tag:强制使用特定字幕标签/插件名称
-fix_sub_duration:修复字幕持续时间
-canvas_size size:设置画布尺寸(WxH或缩写形式)
-spre preset:将字幕选项设置为指定的预设
aiastia commented 1 year ago

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1" -c:v libx264 -c:a aac output.mp4 . .

要将多个视频文件合并为单个视频,您可以使用 FFmpeg 中的 concat 过滤器。下面是一个简单的示例,它将 input1.mp4 和 input2.mp4 这两个文件合并为 output.mp4 文件:

TXT 复制 ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1" -c:v libx264 -c:a aac output.mp4 在此示例中,-i 表示输入文件,-filter_complex 指定要使用的 filter-graph,-c:v 和 -c:a 分别指定要使用的视频和音频编解码器。在 filter_complex 中,[0:v:0][0:a:0][1:v:0][1:a:0] 表示输入文件流,concat=n=2:v=1:a=1 表示将所有输入流连接成单个输出流,并将其写入 output.mp4。 请注意,以上示例假定合并的视频具有相同的视频和音频编解码器、分辨率和帧速率等参数。如果您的输入文件没有这些参数,您需要添加其他过滤器,例如 scale 和 setpts 等,以确保所有输入流都具有相同的参数。