Я пытаюсь удалить части видео, где нет (или мало) аудио. Для этого я использую Audacity (Analyze-> Sound finder) и экспортирую метку. Это приводит к чему-то вроде этого:
0.000000 5.170000 1
12.520000 12.630000 2
14.400000 15.660000 3
17.430000 22.150000 4
...
С этим регулярным выражением: ([\d]+.[\d]{6})\t([\d]+.[\d]{6})\t([\d]+)\n
> ffmpeg -i VL1.mp4 -strict -2 -ss \1 -to \2 buff.mp4\nffmpeg -f concat -i <(echo "file '/home/rene/videotest/output.mp4'\nfile '/home/rene/videotest/buff.mp4'") -c copy output2.mp4\nrm buff.mp4\nmv output2.mp4 output.mp4\n
и некоторые ручные изменения я получаю так:
#!/bin/bash
ffmpeg -i VL1.mp4 -strict -2 -ss 0.000000 -to 5.170000 output.mp4
ffmpeg -i VL1.mp4 -strict -2 -ss 12.520000 -to 12.630000 buff.mp4
ffmpeg -f concat -i <(echo "file '/home/rene/videotest/output.mp4'
file '/home/rene/videotest/buff.mp4'") -c copy output2.mp4
rm buff.mp4
mv output2.mp4 output.mp4
ffmpeg -i VL1.mp4 -strict -2 -ss 14.400000 -to 15.660000 buff.mp4
ffmpeg -f concat -i <(echo "file '/home/rene/videotest/output.mp4'
file '/home/rene/videotest/buff.mp4'") -c copy output2.mp4
rm buff.mp4
mv output2.mp4 output.mp4
ffmpeg -i VL1.mp4 -strict -2 -ss 17.430000 -to 22.150000 buff.mp4
ffmpeg -f concat -i <(echo "file '/home/rene/videotest/output.mp4'
file '/home/rene/videotest/buff.mp4'") -c copy output2.mp4
rm buff.mp4
mv output2.mp4 output.mp4
...
Это работает довольно хорошо, и я получаю файл output.mp4
который содержит только те части, которые я хочу.
К сожалению, это невероятно медленно - и я боюсь, что это разрушает мой жесткий диск (поскольку для каждой части создается файл buff.mp4
, новый файл, содержащий все существующие части плюс этот короткий клип, записывается на жесткий диск, а старый файл, содержащий существующую части удаляются). Поскольку большинство клипов ДЕЙСТВИТЕЛЬНО коротки (обычно менее нескольких секунд), моя идея заключалась в том, чтобы не записывать файл buff.mp4
на жесткий диск, а вместо этого передать его в ffmpeg через <
(так держать в оперативной памяти?). Второе - добавить output.mp4
а не переписывать файл каждый раз.
К сожалению, для обеих вещей мое знание ffmpeg и bash в целом слишком слабое. Может ли кто-нибудь помочь мне?
Я должен быть в состоянии написать хороший сценарий без ручного регулярного выражения. И, конечно, я опубликую это позже.