Я думаю, что всем известна эта проблема с загрузкой видео с разрешением 480p и 1080p с Youtube, и что для многих программ загрузки доступен единственный способ отдельно загрузить дорожки видео и аудио, а затем смешать их в один контейнер.

Существует код ffmpeg для мультиплексирования (один за другим) треков .m4a и .m4v в один контейнер .mp4

Вот код:

ffmpeg -i "file name.m4v" -i "file name.m4a" -acodec copy -vcodec copy "file name.mp4"

Но как BATCH мультиплексировать много файлов .m4a & .m4v?

Заранее спасибо...

1 ответ1

2

Используйте для цикла. Этот пример предназначен для bash и использует манипулирование переменными bash , но его можно адаптировать для других оболочек типа unix/linux.

Примечание: это предполагает, что вы находитесь в каталоге с файлами, и что видео- и аудиофайлы присутствуют с одинаковыми именами, отличающимися только расширением (.m4v - видео, .m4a - аудио).

for v in *.m4v; do ffmpeg -i "${v}" -i "${v//.m4v/.m4a}" -acodec copy -vcodec copy "${v//.m4v/.mp4}"; done

объяснение

for v in *.m4v Выполните следующие действия для каждого файла, заканчивающегося на «.m4v». v - это имя переменной, которая будет присваиваться каждому видеофайлу в текущем каталоге, по одному, bash . bash автоматически преобразует *.m4v в список файлов .m4v в текущем каталоге и передает их в цикл for. Вам не нужно вводить имена файлов вручную.

Переменная v содержит разные имена видеофайлов на каждой итерации цикла, например, "video_file_1.m4v" , затем "video_file_2.m4v" и т.д. ${v//pattern/replacement} replace } сообщает bash найти вхождения pattern и заменить их с replacement . Например, ${v//.m4v/.mp4} преобразует имя файла "video_file_1.m4v" в "video_file_1.mp4" .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .