排行榜

使用 ffmpeg 从视频中提取每个音频和字幕

本文阅读 4 分钟
首页 运维中心 正文
广告

本文介绍了使用 ffmpeg 从视频中提取每个音频和字幕的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有多个音轨和字幕要提取到一个 .mkv 文件中.我是 ffmpeg 命令的新手,这是我尝试过的(音频):

ffmpeg -i VIDEO.mkv -vn -acodec copy AUDIO.aac

它只提取了 1 个音频.我想要的是告诉 ffmpeg 将每个音频文件和字幕文件提取到目的地,并保留每个文件和扩展名的原始名称.(因为我不知道音频文件是哪个扩展名,有时可能是 .flac.aac).

我不确定我在网上找到的解决方案,因为它非常复杂,我需要解释一下它是如何工作的,以便我将来可以操纵命令.顺便说一下,我计划从 Windows CMD 运行代码.

谢谢.

推荐答案

ffmpeg 中还没有选项可以自动将所有流提取到适当的容器中,但当然可以手动进行.

您只需要知道要提取的格式的适当容器即可.

默认 流选择 只为每个流类型选择一个流,因此您必须使用 -map 选项手动映射每个流.

使用 ffmpegffprobe 您可以获得每个流中的信息,并且有一个 多种格式(xml、json、cvs 等)可满足您的需求.

ffmpeg -i input.mkv

结果输出(我删掉了一些额外的东西,流号和格式信息很重要):

Input #0, matroska,webm, from 'input.mkv':  Metadata:  Duration: 00:00:05.00, start: 0.000000, bitrate: 106 kb/s    Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv444p, 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
    Stream #0:1: Audio: vorbis, 44100 Hz, mono, fltp (default)
    Stream #0:2: Audio: aac, 44100 Hz, mono, fltp (default)
    Stream #0:3: Audio: flac, 44100 Hz, mono, fltp (default)
    Stream #0:4: Subtitle: ass (default)


ffprobe 示例


ffprobe -v error -show_entries stream=index,codec_name,codec_type input.mkv

结果输出:

[STREAM]index=0codec_name=h264codec_type=video[/STREAM][STREAM]index=1codec_name=vorbiscodec_type=audio[/STREAM][STREAM]index=2codec_name=aaccodec_type=audio[/STREAM][STREAM]index=3codec_name=flaccodec_type=audio[/STREAM][STREAM]index=4codec_name=asscodec_type=subtitle[/STREAM]


2.提取流

使用来自上述命令之一的信息:

2. Extract the streams

Using the info from one of the commands above:

ffmpeg -i input.mkv \
-map 0:v -c copy video_h264.mkv \
-map 0:a:0 -c copy audio0_vorbis.oga \
-map 0:a:1 -c copy audio1_aac.m4a \
-map 0:a:2 -c copy audio2.flac \
-map 0:s -c copy subtitles.ass

在这种情况下,上面的例子与:

ffmpeg -i input.mkv \
-map 0:0 -c copy video_h264.mkv \
-map 0:1 -c copy audio0_vorbis.oga \
-map 0:2 -c copy audio1_aac.m4a \
-map 0:3 -c copy audio2.flac \
-map 0:4 -c copy subtitles.ass


  • 我更喜欢第一个例子,因为 input file index:stream specifier:stream index 更灵活和高效;它也不太容易出现错误映射.

    • I prefer the first example because the input file index:stream specifier:stream index is more flexible and efficient; it is also less prone to incorrect mapping.

      查看关于流说明符-map option 以完全理解语法.FFmpeg mux 视频和音频(来自另一个视频) - 映射问题的答案中提供了其他信息.

      这些示例将流复制(重新复用)所以没有将发生重新编码.

      将流与某些常见格式的输出扩展名匹配的部分列表:

      <头>

      视频格式扩展
      H.264.mp4、.m4v、.mov、.h264、.264
      H.265/HEVC.mp4、.h265、.265
      VP8/VP9.webm
      AV1.mp4
      MPEG-4.mp4、.avi
      MPEG-2.mpg、.vob、.ts
      DV.dv、.avi、.mov
      理论.ogv/.ogg
      FFV1.mkv
      几乎所有.mkv, .nut


      <头>

      音频格式扩展
      AAC.m4a、.aac
      MP3.mp3
      PCM.wav
      Vorbis.oga/.ogg
      作品.opus、.oga/.ogg、.mp4
      FLAC.flac、.oga/.ogg
      几乎所有.mka, .nut


      <头>

      字幕格式扩展
      Subrip/SRT.srt
      变电站Alpha/ASS.ass

      这篇关于使用 ffmpeg 从视频中提取每个音频和字幕的文章就介绍到这了,希望我们推荐的答案对大家有所帮助


本文经授权后发布,本文观点不代表立场,文章出自:https://www.it1352.com/2466831.html
利用chrome浏览器自带功能进行网页的滚动长截图,截图整个网页
« 上一篇 07-20
ffmpeg 视频实现各种特效
下一篇 » 07-25
广告

相关推荐