如何用ffmpeg提取小视频块?
How to extract small video chunk with ffmpeg?
我正在编写脚本以根据字幕时间将视频拆分为多个小文件。每个块都说明了如何标记一个单词 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.
问题
只有一些块是 blank/empty。
如何防止我的视频 blank/empty?
一条命令完成
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
模式,并且decode seek (-ss after -i)时,ffmpeg只在关键帧处剪切,所以有时在指定的时间范围内可能没有任何关键帧,因此输出的mkvs是空的。您可以通过一次提取和编码来避免这种情况。
我正在编写脚本以根据字幕时间将视频拆分为多个小文件。每个块都说明了如何标记一个单词 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.
问题
只有一些块是 blank/empty。
如何防止我的视频 blank/empty?
一条命令完成
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
模式,并且decode seek (-ss after -i)时,ffmpeg只在关键帧处剪切,所以有时在指定的时间范围内可能没有任何关键帧,因此输出的mkvs是空的。您可以通过一次提取和编码来避免这种情况。