Форум русскоязычного сообщества Ubuntu


Автор Тема: Как заставить ffmpeg кодировать одновременно несколько файлов?  (Прочитано 3520 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dm2003

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
    • Книга статей блога softhelp.org.ua
Есть скрипт, для примера, который массово кодирует видео из одного формата, допустим в .mpg.

#!/bin/sh
mkdir convert
for f in *.avi *.MOV *.mkv *.mp4 *.MTS *.AVI ; #Добавить нужный формат
do
ffmpeg -i "$f" -f dvd -vcodec mpeg2video -threads 3 -r 25.00 -filter:v scale=720:576 -aspect 16:9 -b:v 1700k -mbd rd -trellis 1 -flags +mv0 -cmp 2 -subcmp 2 -acodec mp2 -b:a 128k -ar 48000 -ac 2 -threads 0  convert/$f.mpg;
done

Параметр -threads 0 должен задействовать автоматически нужное количество ядер процессора для многопоточного кодирования. Получается, что во время кодирования задействуются все ядра процессора. Но в итоге кодируется сразу всего один файл, затем другой и т.д. А какой параметр нужно добавить, чтобы сразу кодировалось, к примеру, 3 - 4 файла одновременно?
http://softhelp.org.ua - мой блог
Игры для Ubuntu - http://ubuntugame.org.ua/
Что такое Ubuntu? - https://ubuntu-for-all.blogspot.com/

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12090
  • Xubuntu 20.04
    • Просмотр профиля
    • Github
Можно запустить сразу несколько команд - на каждый файл по процессу, например. Но в чем смысл?

Ресурс процессора - все тот же а будет он одновременно несколько потоков кодировать или один - разнице в итоге быть не должно большой.
Это как бы узкая дырка в дне бассейна, в который льется вода из m шлангов каждый из которых выливает воду со скоростью больше чем скорость через дырку, но в каждом шланге фиксированный объем. Собственно в аналогии понятно - что без разницы как вы будете наполнять бассейн - сразу из всех шлангов или из одного шланга в один момент времени - все равно узкое место - сливная дырка (в нашем случае - процессор).
« Последнее редактирование: 11 Ноябрь 2015, 15:42:43 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн dm2003

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
    • Книга статей блога softhelp.org.ua
Это ясно. Но если к примеру не использовать параметр -threads 0, тогда как указать скрипту, что нужно кодировать n-ое количество файлов одновременно?
« Последнее редактирование: 11 Ноябрь 2015, 16:04:32 от dm2003 »
http://softhelp.org.ua - мой блог
Игры для Ubuntu - http://ubuntugame.org.ua/
Что такое Ubuntu? - https://ubuntu-for-all.blogspot.com/

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12090
  • Xubuntu 20.04
    • Просмотр профиля
    • Github
dm2003, скрипт кодирует файлы последовательно. А параметр -threads просто указывает как использовать процессор.
« Последнее редактирование: 11 Ноябрь 2015, 18:40:42 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн dm2003

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
    • Книга статей блога softhelp.org.ua
Да, я это знаю. Может быть я невнятно выразил свой вопрос, но мне нужно, чтобы скрипт кодировал одновременно 3-4 файла. Как это реализовать?
http://softhelp.org.ua - мой блог
Игры для Ubuntu - http://ubuntugame.org.ua/
Что такое Ubuntu? - https://ubuntu-for-all.blogspot.com/

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12090
  • Xubuntu 20.04
    • Просмотр профиля
    • Github
dm2003, я уже ответил - запустите параллельно несколько процессов - будут вам эти процессы в параллель кодировать несколько файлов (по одному каждый).
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн dm2003

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
    • Книга статей блога softhelp.org.ua
Так не интересно ))) Я раньше так делал. Но думал, что можно сделать это в одном скрипте. Хотя я знаю, что это можно сделать, но вот как? Ну да ладно. Спасибо за ответы. Удачи!
http://softhelp.org.ua - мой блог
Игры для Ubuntu - http://ubuntugame.org.ua/
Что такое Ubuntu? - https://ubuntu-for-all.blogspot.com/

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12090
  • Xubuntu 20.04
    • Просмотр профиля
    • Github
бла-бла& - запустит бла-бла в беграунде, вернув управление в скрипт. Далее запускаем еще раз так же. И т.д. и т.п.
Что бы не завалить систему толпой процессов - надо либо изначально разделить очередь из обрабатываемых файлов на несколько частей (каждую часть отдаем своему процессу), либо динамически раскидывать файлы по индивидуальным процессам, следя за тем, что бы число живых процессов не превышало некоторой константы.

На bash - я не смогу такое написать: я его почти не знаю, на питоне написал бы легко.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
dm2003, программа &ЗЫ подобное можно провернуть через make. Там легко можно указать количество потоков.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн pol238

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Подскажите, пожалуйста, как все-таки можно запустить одновременно выполнение нескольких задач? Мне нужно начать записывать сразу несколько потоков, как это можно сделать?
ffmpeg -i "https://57820f09e94a7.streamlock.net/live/Vidnoe4.stream/playlist.m3u8" -f mpegts -vcodec copy -acodec copy test1.mp4
ffmpeg -i "https://57820f09e94a7.streamlock.net/live/Vidnoe4.stream/playlist.m3u8" -f mpegts -vcodec copy -acodec copy test2.mp4
... и т.д.
ffmpeg -i "...поток 3..." -f mpegts -vcodec copy -acodec copy файл3.mp4

Оффлайн kR

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
https://github.com/serg2a/audio2mp3
Нужно будет изменить массив app_arg (66 строчка) в src/audio2mp3.c если не в .мп3 там парметры вызова ffmpeg

 

Страница сгенерирована за 0.076 секунд. Запросов: 21.