Cod*_*ent 11 video linux unix bash ffmpeg
我目前正在使用 ffmpeg 来切片视频文件。我通过一个名为 ffmpeg_split.sh 的脚本自动化了这个过程。虽然这很慢,但它可以有效地将视频拆分为等效的设置。唯一的问题是它有帧速率问题。下面的邪恶汤推荐了一种segment在 ffmpeg 中使用的方法。我试过这个,但它没有给我等效的持续时间段。
更新
每个 evilsoup 使用此命令分割视频:
ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment output%03d.mp4
老的:
以下是使用脚本切片视频的语法: ffmpeg_split.sh -s test_vid.mp4 -o video-part%03d.mp4 -c 00:00:08
结果
my_split_script.sh
input.mp4 – Duration 00:01:20
#EXTINF:10,
Output01.mp4
#EXTINF:10,
Output02.mp4
#EXTINF:10,
Output03.mp4
#EXTINF:9,
Output04.mp4
#EXTINF:10,
Output05.mp4
#EXTINF:10,
Output06.mp4
#EXTINF:11,
Output07.mp4
#EXTINF:10,
Output08.mp4
real 0m30.517s #execution time
Run Code Online (Sandbox Code Playgroud)
ffmpeg
input.mp4 – Duration 00:01:20
#EXTINF:10,
Output01.mp4
#EXTINF:10,
Output02.mp4
#EXTINF:6,
Output03.mp4
#EXTINF:10,
Output04.mp4
#EXTINF:10,
Output05.mp4
#EXTINF:7,
Output06.mp4
#EXTINF:10,
Output07.mp4
#EXTINF:9,
Output08.mp4
real 0m7.493s #executition time
Run Code Online (Sandbox Code Playgroud)
小智 14
您可以直接从 ffmpeg 执行此操作,而无需使用脚本。基本上,无论何时使用ffmpeg segment,它都会继续并尽力在您为每个段指定的时间附近进行拆分。这是基于key_frames它会找到最近的关键帧并在那里剪切。为了剪切精确的片段,您需要重新编码整个视频。
ffmpeg -i input.mp4 -c:v libx264 -crf 22 -map 0 -segment_time 9 -g 9 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*9)" -f segment output%03d.mp4
Run Code Online (Sandbox Code Playgroud)
您需要阅读-crf,-sc_threshold和-force_key_frames。在ffmpeg的 wiki 中。
evi*_*oup 13
ffmpeg实际上可以自己完成,使用段复用器
ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment output%03d.mp4
Run Code Online (Sandbox Code Playgroud)
您绝对应该阅读文档并进行一些尝试以获得最佳结果(默认值对于大多数用途已经足够了,但不会让您获得 100% 准确的拆分)。
通常,如果您需要从文件中获取诸如持续时间之类的信息,最好使用ffprobe,它与捆绑在一起ffmpeg- 它将信息打印为一堆key=value对,使其更容易处理。
ffprobe -show_format file.mp4 | grep -F duration | cut -d= -f2
## or, if you want hh:mm:ss format:
ffprobe -show_format -sexagesimal file.mp4 | grep -F duration | cut -d= -f2
Run Code Online (Sandbox Code Playgroud)
...但是,我认为依赖ffmpeg自己的选项可能更好,而不是 shell 脚本(效率会低得多,因为它需要调用 的许多实例ffmpeg)。
| 归档时间: |
|
| 查看次数: |
29060 次 |
| 最近记录: |