video - 如何使用 ffmpeg 提取小视频 block ?

标签 video ffmpeg webm

我正在给 写一个脚本根据字幕时间将视频分割成多个小文件 .每个 block 都说明了如何签署一个单词 LSF(法国手语)。

但是,某些文件在提取后并转换为 webm 时为空白。他们是 0kb .

时序数据

我从 .ass 中提取时间获取此类文件的文件

0:00:01.01 0:00:04.07
0:00:04.09 0:00:07.00
0:00:07.00 0:00:10.36
0:00:10.36 0:00:13.28

第一列是 start_time , 第二个是 end_time
萃取
extract_word_chunk() {
  ffmpeg \
    -i "$INPUT_FILE" \
    -ss "$start" \
    -to "$end" \
    -vcodec copy \
    -acodec copy \
    -loglevel error \
    "$chunk" < /dev/null
}

转换为 webm
convert_to_webm() {
  ffmpeg \
    -y \
    -i "$chunk" \
    -acodec libvorbis \
    -codec:v libvpx \
    -b:v 192k \
    -b:a 96k \
    -minrate 128k \
    -maxrate 256k \
    -bufsize 192k \
    -quality good \
    -cpu-used 2 \
    -deadline best \
    -loglevel error \
  "$chunk.webm" < /dev/null
}

输出
# extract_word_chunk
ffmpeg \
  -i 'assets/raw/partie 1: Apprendre 300 mots du quotidien en LSF.jauvert laura.mkv' \
  -ss 0:00:01.01 \
  -to 0:00:04.07 \
  -vcodec copy \
  -acodec copy \
  -loglevel error \
  assets/raw/0:00:01.01.mkv

# convert_to_webm
ffmpeg -y \
  -i assets/raw/0:00:01.01.mkv \
  -acodec libvorbis \
  -codec:v libvpx \
  -b:v 192k \
  -b:a 96k \
  -minrate 128k \
  -maxrate 256k \
  -bufsize 192k \
  -quality good \
  -cpu-used 2 \
  -deadline best \
  -loglevel error \
  assets/raw/0:00:01.01.mkv.webm

错误
[buffer @ 0x16d8be0] Unable to parse option value "-1" as pixel format
    Last message repeated 1 times
[buffer @ 0x16d8be0] Error setting option pix_fmt to value -1.
[graph 0 input from stream 0:0 @ 0x16e6fc0] Error applying options to the filter.

问题

只有一些 block 是空白/空的。

如何防止我的视频为空白/空?

最佳答案

在一个命令中完成

ffmpeg -y \
  -i 'assets/raw/partie 1: Apprendre 300 mots du quotidien en LSF.jauvert laura.mkv' \
  -ss 0:00:01.01 \
  -to 0:00:04.07 \
  -acodec libvorbis \
  -codec:v libvpx \
  -b:v 192k \
  -b:a 96k \
  -minrate 128k \
  -maxrate 256k \
  -bufsize 192k \
  -quality good \
  -cpu-used 2 \
  -deadline best \
  -loglevel error \
  assets/raw/0:00:01.01.mkv.webm

当您使用 copy模式和解码查找(-i 之后的-ss)ffmpeg 仅在关键帧处剪切,因此有时在指定的时间范围内可能没有任何关键帧,因此这些输出 mkv 为空。您可以通过一步提取和编码来避免这种情况。

关于video - 如何使用 ffmpeg 提取小视频 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47616933/

相关文章:

android - 如何在android中压缩视频?

javascript - 如何提取直接 facebook 视频 url

ffmpeg - FFMPEG 无法丢弃媒体中的无效数据流。为什么它会留下来以及如何丢弃它?

ffmpeg - 为什么 FFMPEG SSIM 会根据这些未压缩视频中的哪个先/后产生不同的比较结果?

youtube - 在特定位置播放YouTube *直接链接*视频?

video - 在 Google 幻灯片上播放 ffmpeg 转换的视频

ffmpeg - 如何在 GPU(AMD)中运行 ffmpeg

ffmpeg - 将一张 PNG 图像转换为具有透明度和淡入淡出效果的 webm 视频

C++ ffmpeg "Starting new cluster"错误

video - 使用ffmpeg提取视频流