Нужно объяснить детали команды ffmpeg и pipe - PullRequest
0 голосов
/ 06 декабря 2011

Получил следующее из FFmpeg FAQ :

mkfifo intermediate1.mpg
mkfifo intermediate2.mpg
ffmpeg -i input1.avi -sameq -y intermediate1.mpg < /dev/null &
ffmpeg -i input2.avi -sameq -y intermediate2.mpg < /dev/null &
cat intermediate1.mpg intermediate2.mpg |\
ffmpeg -f mpeg -i - -sameq -vcodec mpeg4 -acodec libmp3lame output.avi

Прежде чем использовать или изменить его, я хотел бы полностью понять его.

Что делает < /dev/null &?

Я понимаю | это труба, но почему | \?

Что такое -f mpeg после ffmpeg (кажется, он говорит ffmpeg принять переданный по каналу вывод из cat (?))

1 Ответ

1 голос
/ 06 декабря 2011

</ dev / null & </strong>

Это фактически две части:

  1. </ dev / null </li>
  2. &

1 (< /dev/null) - это простой способ передать входные / выходные данные в программу.Я не уверен, что это необходимо, но это может быть потому, что вы используете именованные каналы.

2 (&) просто отодвигает команду в фоновый режим и позволяет вам делать другие вещи.Это необходимо, потому что в противном случае ffmpeg будет просто сидеть и ждать, пока другой конец именованного канала «откроется».

Обратная косая черта после трубы

Обратная косая черта послеpipe просто позволяет вам вводить длинную команду на нескольких строках.Если вы хотите записать его в одну строку, вы должны опустить обратную косую черту.Вы заметите, что подсказка меняется с вашего обычного [user@machine directory]$ (или любого другого) на что-то вроде > после ввода первой строки (заканчивающейся обратной косой чертой).Это означает, что ваша команда продолжается с более ранней строки.

ffmpeg -f switch

Страница man для ffmpeg указывает, что -Переключатель f позволяет форсировать формат файла.В примере в FAQ вы хотите принудительно ввести формат ввода (читай: скажите ffmpeg, какой формат ввода ожидать), поскольку вы используете в качестве входных данных биты по конвейеру.Обычно он пытается угадать формат ввода на основе расширения файла и / или «магии файла».

...