Я пишу bash-скрипт для ускорения подкастов. В нем я имею:

ffmpeg -nostats -hide_banner -loglevel panic -y -i normal/$channel/$filename -filter:a "atempo=1.3" fast/$channel/$filename

Тем не менее, когда я запускаю это, я получаю много выводов, как это:

stream #0:
   keyframe=1
   duration=0.026
   dts=336.196  pts=336.196
   size=836

Разве флаг -nostats должен это останавливать? Согласно документации:

-stats (global)

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

Кроме того, я по-прежнему получаю вывод баннера от ffmpeg, хотя у меня есть -hide_banner .

-hide_banner

Подавить печать баннера.

Все инструменты FFmpeg обычно показывают уведомление об авторских правах, опции сборки и версии библиотеки. Эта опция может быть использована для подавления печати этой информации.

Я не могу понять, почему ffmpeg игнорирует эти флаги или (что более вероятно), что я делаю неправильно.

Обновить

Я также попытался -loglevel panic и он все еще выводит все.

Я также получаю вывод в красном, как это:

00000060  b3 2e 0d 77 68 54 73 a9 e3 79 c7 65 ca 85 45 64 ...whTs..y.e..Ed
00000070  30 5c 94 ef 4b 02 be 67 4e 71 e4 39 18 5c 23 a3 0\..K..gNq.9.\#.
00000080  d6 54 ec 8a 79 59 e1 74 31 52 a4 5f 52 2f 48 5f .T..yY.t1R._R/H_
00000090  15 2a a5 5f 2f e7 c2 c3 7a 85 da bf 2e 18 ca d2 .*._/...z.......
000000a0  8d ad ab 69 d3 e8 c5 7c 98 7c 8c 79 34 c6 9a 2d ...i...|.|.y4..-
000000b0  10 fe 69 91 73 23 9e 3c 7e fc b3 eb e4 95 7c 92 ..i.s#.<~.....|.
000000c0  b4 b4 21 bc b4 5e 68 43 d7 fb 4b 4a 1a be 87 b4 ..!..^hC..KJ....
000000d0  f5 e0 e0 01 00 1f e4 40 33 bd ff fc 59 ae 86 94 .......@3...Y...
000000e0  30 60 30 f6 7f c1 12 4b c8 43 c9 2c a4 74 bc 3c 0`0....K.C.,.t.<
000000f0  f0 40 00 1d ab f1 9f 8c 9a 60 30 8c 6c c8 40 d5 .@.......`0.l.@.

У меня есть больше вывода на Pastebin

Я использую ffmpeg version 3.0.2-1~trusty

2 ответа2

1

Единственный флаг, который вам нужен:

-loglevel 0

Это должно подавить все выходные данные терминала. Если он не работает для вас, убедитесь, что вы используете последнюю версию FFmpeg (4.0 на момент написания).

0

Извинения за некропостное решение; это единственный существующий поток, описывающий ситуацию, с которой я столкнулся, когда я пытался устранить более поздние ошибки в скрипте.

Одним из способов запуска этого вывода является то, что ffmpeg может потреблять байты из stdin .

Следующее действие приведет к выводу stream #0 ; это также приведет к тому, что последующие файлы не будут преобразованы.

find . -name '*.ogg' | while read filename; do
    ffmpeg -loglevel 0 -nostats -i "$filename" "$filename.mp3"
done

Проблема связана с тем, что ffmpeg по умолчанию использует stdin ; используйте -nostdin чтобы отключить это поведение

Со страницы руководства:

-stdin
    Enable interaction on standard input. On by default unless standard input is
    used as an input. To explicitly disable interaction you need to specify
    "-nostdin".

    Disabling interaction on standard input is useful, for example, if ffmpeg is
    in the background process group. Roughly the same result can be achieved with
    "ffmpeg ... < /dev/null" but it
    requires a shell.

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