LINUX.ORG.RU

ffmpeg не хочет обрабатывать кодек amr_nb в Archlinux

 , , ,


0

1

У меня есть видеорегистратор, некоторые видео с которого я обрабатываю и выкладываю на Youtube. Но после моего перехода на Арч, ffmpeg почему-то не хочет обрабатывать видео с аудиокодеком amr_nb. В Ubuntu он их обрабатывал на ура, а в Арче почему-то не хочет. Обрабатываю их так же, как обрабатывал всегда и вообще с помощью скрипта. Вот вывод:

ffmpeg version n4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 8.2.1 (GCC) 20180831
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x564da29197c0] Auto-inserting h264_mp4toannexb bitstream filter
Input #0, concat, from '1.txt':
  Duration: N/A, start: 0.000000, bitrate: 10161 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 10149 kb/s, SAR 1:1 DAR 16:9, 24.34 fps, 24.33 tbr, 90k tbn, 180k tbc
    Metadata:
      creation_time   : 2018-12-01T02:23:57.000000Z
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: amr_nb (samr / 0x726D6173), 8000 Hz, mono, flt, 12 kb/s
    Metadata:
      creation_time   : 2018-12-01T02:23:57.000000Z
      handler_name    : SoundHandle
[mp4 @ 0x564da2a5c500] Could not find tag for codec amr_nb in stream #1, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
    Last message repeated 1 times
Это была процедура слияния множества маленьких видео в одно. Сам скрипт:
#!/bin/bash

ffmpeg -safe 0 -f concat -i $1 -c copy $2
Если при слиянии вырезать весь звук (добавив параметр -an), то все проходит успешно (но без звука). Пакет opencore-amr установлен. Не подскажете ли, как подправить, чтобы он обрабатывал видео с этим аудиокодеком?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 2)

Ответ на: комментарий от deep-purple

Это займет много времени. Но в Ubuntu почему-то все было нормально. У меня есть в коллекции видео, обработанные именно с этим кодеком.

Rinaldus ★★★★★
() автор топика
Ответ на: комментарий от Rinaldus

Ну сборка ффмпега другая, там и синтаксис аргументов может отличаться и наличие кодеков.

Что значит много времени? Впиши в тхт всего два файла и запускай.

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от Tanger

А как ffmpeg ставил?

Просто с помощью pacman взял и поставил.

В генте есть use-флаг

У арчевского ffmpeg есть флаг --enable-libopencore_amrnb. И соответствующий пакет у меня тоже стоит.
Сборку ffmpeg-full я бы оставил как крайнее средство, там рехнешься с зависимостями, многие из которых тоже придется собирать из того же aur.

Rinaldus ★★★★★
() автор топика
Ответ на: комментарий от Rinaldus

У арчевского ffmpeg есть флаг --enable-libopencore_amrnb

Да, я вижу. Но в генте есть amr, а есть amrenc.

	amr? ( >=media-libs/opencore-amr-0.1.3-r1[${MULTILIB_USEDEP}] )
...
		amrenc? ( >=media-libs/vo-amrwbenc-0.1.2-r1[${MULTILIB_USEDEP}] )

А в арче я вижу только зависимость от opencore-amr. Я не уверен, что для -acodec copy нужен enc, но вдруг?

Кстати, в статик-билдах ffmpeg зависимость от amrwbenc есть.

Tanger ★★★★★
()
Последнее исправление: Tanger (всего исправлений: 1)
Ответ на: комментарий от Tanger

Покажи свой ffmpeg -codecs | grep amr

По ссылке выше на git-readme.txt так:

 DEA.L. amr_nb               AMR-NB (Adaptive Multi-Rate NarrowBand) (decoders: amrnb libopencore_amrnb ) (encoders: libopencore_amrnb )
 DEA.L. amr_wb               AMR-WB (Adaptive Multi-Rate WideBand) (decoders: amrwb libopencore_amrwb ) (encoders: libvo_amrwbenc )

Впрочем у тебя Stream #0:1(eng): Audio: amr_nb (samr / 0x726D6173), 8000 Hz, mono, flt, 12 kb/s. И вряд ли тут libvo_amrwbenc имеет какое-то значение.

Tanger ★★★★★
()

ffmpeg -codecs | grep amr

если буковки E нету, а есть только D, значит энкодер надо включать отдельно при сборке ffmpeg-а

Harald ★★★★★
()
Ответ на: комментарий от Harald

Да в том-то и дело, что есть.

ffmpeg version n4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 8.2.1 (GCC) 20180831
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
 DEA.L. amr_nb               AMR-NB (Adaptive Multi-Rate NarrowBand) (decoders: amrnb libopencore_amrnb ) (encoders: libopencore_amrnb )
 D.A.L. amr_wb               AMR-WB (Adaptive Multi-Rate WideBand) (decoders: amrwb libopencore_amrwb )
Я по-прежнему не знаю, почему он не хочет работать с этим кодеком. Но у меня появилась мысль сделать в Docker ffmpeg из убунты и использовать его. И ничего не надо будет компилять.

Rinaldus ★★★★★
() автор топика
Последнее исправление: Rinaldus (всего исправлений: 1)

codec not currently supported in container

Ты ведь в MP4 кладёшь? У него список поддерживаемых кодеков маленький, не думаю что сабж в него входит. Используй всеядный контейнер (MKV) или перекодируй звук (-c:v copy -c:a aac или flac/opus если всё-таки сменишь контейнер). С чего-бы это должно занять много времени?

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

Я кладу в mp4, чтобы можно было выложить на Youtube в формате, который он поддерживает (иначе у меня там будут видео 360p). И кроме того, у меня регистратор пишет в формате mp4, зачем менять контейнер? А любая перекодировка (звука в том числе) занимает очень много времени. Я перекодировал звук в aac на 6 часовом видео минут 20. ffmpeg вообще очень тормознутый, но он универсальный и альтернатив ему нет.

Rinaldus ★★★★★
() автор топика
Ответ на: комментарий от Rinaldus

Ютуб всё-равно твоё видео пережимать будет. Что бы не пережимал надо не только контейнер правильный использовать, но и кодеки (с правильными параметрами). Шесть часов за двадцать минут это долго? Ну тогда разбирайся как ускорить, может оно параллелится

И кроме того, у меня регистратор пишет в формате mp4, зачем менять контейнер?

Китайская железка может выдавать файлы любого уровня кривизны, софтварные плееры и ffmpeg скорее всего будут их жрать. Это не значит что такое сочетание кодеков и контейнера является валидным. Старая версия ffmpeg (в ubuntu) видимо почему-то считала такое сочетание допустимым, новая (в арче) перестала так считать. MP4 это AAC, накрайняк MP3. Всё остальное для него — экзотика, изврат и вообще от лукавого

MrClon ★★★★★
()
Ответ на: комментарий от Moondancer

А точно не 3GP, или как там называлась та вариация MP4 времён когда нокия ещё была тортом, а школьники скидывали друг другу смешнявые видосики по IrDA?

В любом случае MP4+H.264+AAC-LC это канонiчно, нефиг пихать туда всякие кодеки которые приходится гуглить. Для не каноничных сочетаний и экзотики у нас есть MKV

MrClon ★★★★★
()
Ответ на: комментарий от Harald

Эм… щито? Отдельным потоком это в каком смысле? Ну и ffmpeg это не про сборку mkv, это про перекодирование видео/аудио и наложение на них фильтров. Хочешь крутить-вертеть MKV используй mkvtoolnix

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

Эм… щито? Отдельным потоком это в каком смысле?

в смысле один поток видео, второй поток звук, третий субтитры. А не наложенные на видео

Harald ★★★★★
()
Ответ на: комментарий от MrClon

А точно не 3GP

Нет, я именно поэтому и помню: нормальные мобилки 3GP пишут, а нокии почему-то MP4. Впрочем, у них контейнер почти одинаковый.

когда нокия ещё была тортом

Да она и сейчас торт, благодаря банану. Я подумывал что-то кнопочное на ведроиде брать, а как увидел успехи бананахакеров — склоняюсь к нокии теперь. Ибо кнопочники на ведроиде сплошь убогие — там 4G нету, там джека, там рута, там симлок, там клава глючная... И комьюнити нету, одноразовыми партиями выпускаются, ну кроме RugGear разве что. А теперь хз; с одной стороны — железо так себе (полгига рамы, качельки нету, крышка торчащая), с другой — мощное комьюнити, на неё и ведроид наверняка скоро портанут, и GNU/Linux — вообще топчик будет, не хуже N900. Но я всё равно спешить пока с решением не буду, сначала сводную табличку доделаю, ну и новых апаратов на KaiOS подожду в этом году, вдруг чо покруче выйдёт.

нефиг пихать туда всякие кодеки которые приходится гуглить

Вот и выросло поколение, которое чото гуглит, вместо того, чтобы K-Lite Codec Pack накатить :3

Moondancer
()
Ответ на: комментарий от Harald

Это называется софтсаб. sudo apt install mkvtoolnix-gui -y && mkvtoolnix-gui, развлекайся

MrClon ★★★★★
()
Ответ на: комментарий от Rinaldus

Youtube ест mkv. Перепаковка в mkv качество не меняет и выполняется быстро.

anonymous
()
Ответ на: комментарий от Harald

Хоть mkv и всеядный, но субтитры из mp4 действительно не поддерживает. Но их можно переконвертировать в srt -scodec srt. Только осторожнее, ffmpeg'овский ttxt парсер бывает теряет некоторые строки. Лучше субтитры вытащить спец софтом.

anonymous
()

Попробуй static сборку https://www.ffmpeg.org/download.html В режиме copy по идее декодеры/кодеры не важны. Но ffmpeg капризный и неизвестные кодеки не будет обрабатывать. Но здесь же он пишет, что знает этот кодек amr_nb. В сообщении говорится, что контейнер не поддерживает кодек. Вместо -safe 0 попробуй -strict -2

anonymous
()
Ответ на: комментарий от Moondancer

Вот и выросло поколение, которое чото гуглит, вместо того, чтобы K-Lite Codec Pack накатить

Я кодек паки лет 10 не использовал даже когда сидел на винде.

anonymous
()
Ответ на: комментарий от Moondancer

И файлы портил WMP, да?

Если включить автовыравнивание громкости, то после полного прослушивания трека значение громкости записывалось в файл, соответственно он модифицировался. Кстати довольно удобная фича сканирования на лету была. Сейчас в Foobar реализовали что-то подобное с Replay Gain. Хотя Foobar та еще кривота, кладущая болт на стандарты и удобство.
Помню был случай в WMP. Включил не помню точно как называется «упорядочивать файлы получая информацию из интернета». Так он такого наворотил...

И трекерщину всякую не играл?

Midi играл вроде простеньким майкрософтовским синтезатором (на самом деле у них была куплена крутая, но старая разработка). Потом я специально ставил какой-то от Yamaha.

натащил на флешке

И получил autorun вирусню.

anonymous
()
Ответ на: комментарий от anonymous

соответственно он модифицировался

Ну и пожалуйста — контрольные суммы летят, файл испорчен, уже ни раздашь его, ни на VirusTotal без нового сканирования не загрузишь, ни так далее. Впрочем, даже это лучше, чем яблочная автовыгрузка любых аудиофайлов в облако.

простеньким майкрософтовским синтезатором

Да вполне годный, чо :3 Но в QuickTime лучше.

autorun

Так кто тебе виноват, что ты его не выключил?

Moondancer
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.