Я нашел что-то для видео, которое выглядит следующим образом.
ffmpeg -i * -c:v libx264 -crf 22 -map 0 -segment_time 1 -g 1 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*9)" -f segment output%03d.mp4
Я попытался использовать это для аудиофайла, но только первый аудиофайл содержал реальное аудио, остальные молчали, кроме того, что это было хорошо, он создавал новый аудиофайл каждую секунду. Кто-нибудь знает, что нужно изменить, чтобы заставить это работать со звуковыми файлами, или другую команду, которая может сделать то же самое?
Ответы:
Это сработало для меня, когда я попробовал это на mp3-файл.
Где
-segment_time
количество времени, которое вы хотите для каждого файла (в секундах).Ссылки
источник
mp3
наm4a
Чтобы разделить большой аудиофайл на набор дорожек различной длины, вы можете использовать следующую команду:
Например, я разбил один файл .opus из Inception Original Soundtrack на вложенные файлы, используя этот текстовый файл, содержащий начало, конец, имя:
Я написал эту короткую
awk
программу для чтения текстового файла и созданияffmpeg
команд из каждой строки:Ниже приведена более подробная
python
версия программыsplit.py
, в которой теперь из командной строки читаются как исходный файл дорожки, так и текстовый файл с указанием субтреков:Вы можете легко создавать более сложные
ffmpeg
вызовы, изменив шаблон команды и / или добавив дополнительные поля в каждую строку файла track_list.источник
subprocess.call(command)
- этоpython
аналогsystem(command)
inawk
, оба из которых позволяют отправлятьffmpeg
команды оболочке. Я отредактировал свой пост, включив в него гибкуюpython
реализацию, иллюстрирующую один из способов, как вы могли бы сделать это.echo
чтобы фактически запустить команды.source="source audio file.m4a"; i=0; t1=0:00; for end_time in 1:24 5:40 14:48 19:33 35:11 40:00 46:08 51:58 ''; do i=$((i+1)); t0=$t1 t1=$end_time; echo ffmpeg -i "$source" -acodec copy -ss $t0 ${t1:+-to} $t1 $(printf "track%02d.%s" $i ${source##*.}); done
В следующей строке аудиофайл будет разбит на несколько файлов, каждый продолжительностью 30 секунд.
Измените 30 (это количество секунд) на любой номер, который вы хотите.
источник
ответ СЛМ :
не будет работать для меня без
-map 0
добавления:источник
Данное решение не сработало для меня. Я полагаю, что это связано со старой версией
ffmpeg
моей системы.В любом случае, я хотел предложить решение, которое сработало для меня. Вы также можете настроить таймеры, чтобы разрешить перекрытие звука, если хотите.
Output file #0 does not contain any stream
ffmpeg -i your_audio_file.mp3 -acodec copy -t 00:00:30 -ss 00:00:00 split_audio_file.mp3
разделите ваши аудиофайлы на 30 секунд
источник