Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Вопросы, приемы и проблемы обработки видео

Модератор: Модераторы разделов

Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение yamah »

Пишу для себя скрипт по переконвертированию видео.
Скрипт типа должен быть универсальным, то есть поддержка различных контейнеров (матрешка, avi, mpeg, mpeg-ps, mpeg-ts, mp4, flv, 3gp), видео (x264, mpeg4 (divx 4/5), xvid, mpeg2, theora, h263) и аудио (mp2, mp3, ac3, ogg vorbis, aac, flac, ape, dts, pcm, amr) кодеков. Видео при этом должно быть высокого качества, внезависимости от расширения

Собственно говоря засунуть контент в MKV, PS, TS достаточно легко. Спасибо пакетам MKVMerge и TSMuxer.
Осталось разобраться с avi, mp4, flv, 3gp.

Скрипт пишу в обратную сторону. То есть сначала хочу сделать функциональность скрипта, а уж потом вылизывать параметры кодирования.

Столкнулся с проблемами.
1. Не нашел параметры для lavc в частности кодеков flac, ogg, dts (если lavc поддерживает кодирование в dts, конечно). В прочем интересуют все опции, включая видео.
2. Не нашел консольного ПО для конвертирование субтитров (в отдельных файлах) между форматами . Ну ладно извлечь в vobsub из DVD-Video, Матрешки смогу, Но нужен конвертер в srt.
3. Глючит mplayer. Почему-то он убежден, что любая аудиодорожка у меня двухканальная, хотя воспроизводит как бы все 6 нормально. При этом smplayer нормально выдает информацию о каналах аудиодорожки.
Собственно тут и нужна помощь!

Собственно приведу скрипт:

Код:

#!/bin/sh INPUT_FILE="" OUTPUT_FILE="" TEMP_DIR=~/tmp/convert # Путь к временным файлам VBITRATE=1000 # Битрейт видео ABITRATE=256 # Битрейт аудио OUTPUT_VCODEC=h264 # Видеокодек в выходном файле OUTPUT_ACODEC=aac # Аудиокодек в выходном файле OUTPUT_SCODEC=srt # Субтитры в выходном файле AUDIOTRAC=1 # aid дорожки SUBTTRAC=1 # pid дорожки INPUT_COUNT=MKV # Входной контейнер NUMBER_OF_ATRACK=2 # Номер извлекаемой дорожки с аудио, если входной контейнер Матрешка NUMBER_OF_STRACK=3 # Номер извлекаемой дорожки с субтитрами, если входной контейнер Матрешка TYPE_OF_ATRACK=ac3 # Тип аудиодорожки при простом извлечении TYPE_OF_STRACK=srt # Тип субтитров при простом извлечении ACODEC_COPY=yes # yes/no # Просто извлечь дорожку? TEMP_FILES="$TEMP_DIR/temp" mkdir $TEMP_DIR mencoder -vf harddup,crop=640:480:0:0,scale=640:480,hqdn3d=2:1:2 -sws 10 -aspect 1.3333 -of rawvideo -o $TEMP_FILES.$OUTPUT_VCODEC \ -nosound -ovc x264 -x264encopts bitrate=$VBITRATE:pass=1:threads=auto:bframes=3:8x8dct:direct_pred=auto:me=hex:subq= 8:b_adapt=2:turbo=2:frameref=8:\ deblock=-1,-1:weight_b:trellis=2:mixed_refs:keyint_min=25:level=5.1:vbv_maxrate=6000:vbv_buf size=6000:ratetol=1 $INPUT_FILE -nosound mencoder -vf harddup,crop=640:480:0:0,scale=640:480,hqdn3d=2:1:2 -sws 10 -aspect 1.3333 -of rawvideo -o $TEMP_FILES.$OUTPUT_VCODEC \ -nosound -ovc x264 -x264encopts bitrate=$VBITRATE:pass=2:threads=auto:bframes=3:partitions=i4x4,i8x8,p8x8,b8x8:8x8dc t:direct_pred=auto:me=hex:subq=8:\ b_adapt=2:turbo=2:frameref=8:deblock=-1,-1:weight_b:trellis=2:mixed_refs:keyint_min=25:level=5.1:vbv_maxrate=6000:vbv_buf size=6000:ratetol=1:qblur=0.5 $INPUT_FILE if [ "$ACODEC_COPY" = "no" ]; then case "$OUTPUT_ACODEC" in mp3) mencoder -mc 0 -noskip -aid 1 $INPUT_FILE -ovc frameno -demuxer lavf -oac mp3lame -aid $AUDIOTRAC -lameopts abr:br=$ABITRATE \ channels=2 -af volnorm=2 -of rawaudio -o $TEMP_FILES-pid$AUDIOTRAC.$OUTPUT_ACODEC;; aac) mencoder -mc 0 -noskip -aid 1 $INPUT_FILE -ovc frameno -demuxer lavf -oac faac -aid $AUDIOTRAC -faacopts br=$ABITRATE:mpeg=4:tns:object=2 \ -channels 6 -af volnorm=2 -of rawaudio -o $TEMP_FILES-pid$AUDIOTRAC.$OUTPUT_ACODEC;; ac3) mencoder -mc 0 -noskip -aid 1 $INPUT_FILE -ovc frameno -demuxer lavf -oac lavc -aid $AUDIOTRAC -lavcopts acodec=ac3:abitrate=384 \ -channels 6 -af volnorm=2 -of rawaudio -o $TEMP_FILES-pid$AUDIOTRAC.$OUTPUT_ACODEC;; esac else if [ "$INPUT_COUNT" = "MKV" ]; then mkvextract tracks $INPUT_FILE $NUMBER_OF_ATRACK:$TEMP_FILES-pid$AUDIOTRAC.ac3 else mencoder -mc 0 -noskip -aid 1 $INPUT_FILE -ovc frameno -demuxer lavf -oac copy -aid $AUDIOTRAC -af volnorm=2 -of rawaudio \ -o audiox264-pid.$OUTPUT_ACODEC fi fi if [ "$INPUT_COUNT" = "MKV" ]; then mkvextract tracks $INPUT_FILE $NUMBER_OF_STRACK:$TEMP_FILES-str.srt fi mkvmerge -o $OUTPUT_FILE --default-duration 0:30.000fps --aspect-ratio -1:1.3333 $TEMP_FILES.$OUTPUT_VCODEC $TEMP_FILES-pid.$OUTPUT_ACODEC \ $TEMP_FILES-pid.str rm -rf $TEMP_DIR/* rm -rf $TEMP_DIR exit 0
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение Rodegast »

> Не нашел консольного ПО для конвертирование субтитров (в отдельных файлах) между форматами .

Вы удивитесь, но mplayer умеет конвертировать сабы :)

> Почему-то он убежден, что любая аудиодорожка у меня двухканальная

Указывай количество каналов вручную.
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение yamah »

Rodegast писал(а):
09.01.2011 22:32
> Не нашел консольного ПО для конвертирование субтитров (в отдельных файлах) между форматами .

Вы удивитесь, но mplayer умеет конвертировать сабы :)

> Почему-то он убежден, что любая аудиодорожка у меня двухканальная

Указывай количество каналов вручную.

Ну то что он srt в vobsub умеет перегонять я уже понял. :-)
А вот опцию -dumpsrtsub я пропустил.

Согласен, что можно вручную указывать. Тем более, что в скрипте пока так и забито.
Но хотел было прикрутить скрипт из этой темы, а mplayer косячит.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение Rodegast »

Тогда проверяй параметры парсера, может у тебя mplayer по русски пишит:
numofchannels=`mplayer -vo null -ao null "$input" -frames 1 2>/dev/null |grep -m 1 'AUDIO'|cut -d ' ' -f 4`

В контейнеры avi, mp4, flv mencoder паковать умеет, ничего стороннего использовать не надо.

Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение yamah »

Rodegast писал(а):
10.01.2011 15:59
Тогда проверяй параметры парсера, может у тебя mplayer по русски пишит:
numofchannels=`mplayer -vo null -ao null "$input" -frames 1 2>/dev/null |grep -m 1 'AUDIO'|cut -d ' ' -f 4`

Прикол в том, что количество каналов я не выдерал еще. Просто смотрел полностью лог mplayer-а

Код: Выделить всё

 mplayer -vo null -ao null "/mnt/Video_Archive/DVD-Rip/Comedy/Убрать перископ Down Periscope (1996) HDTVRip.mkv" -frames 1 -aid 0 3>/dev/null
MPlayer SVN-1.rc4.0.r31086.3plf2010.1-4.4.3 (C) 2000-2010 MPlayer Team
3DNow supported but disabled
3DNowExt supported but disabled
Can't open joystick device /dev/input/js0: No such file or directory
Can't init input joystick
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing /mnt/Video_Archive/DVD-Rip/Comedy/Down Periscope (1996) HDTVRip.mkv.
[mkv] Track ID 1: video (V_MPEG4/ISO/AVC), -vid 0
[mkv] Track ID 2: audio (A_AC3) "AVO - Санаев", -aid 0, -alang rus
[mkv] Track ID 3: audio (A_AC3) "MVO - ОРТ", -aid 1, -alang rus
[mkv] Track ID 4: audio (A_AC3) "MVO - 1", -aid 2, -alang rus
[mkv] Track ID 5: audio (A_AC3) "MVO - 2", -aid 3, -alang rus
[mkv] Track ID 6: audio (A_AC3) "AVO - Живов", -aid 4, -alang rus
[mkv] Track ID 7: audio (A_AC3) "English", -aid 5, -alang eng
[mkv] Track ID 8: audio (A_AC3) "MVO - ОРТ (стерео)", -aid 6, -alang rus
[mkv] Will play video track 1.
Matroska file format detected.
VIDEO:  [avc1]  1024x544  24bpp  25.000 fps    0.0 kbps ( 0.0 kbyte/s)
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 48000 Hz, 2 ch, s16le, 384.0 kbit/25.00% (ratio: 48000->192000)
Selected audio codec: [ffac3] afm: ffmpeg (FFmpeg AC-3)
==========================================================================
AO: [null] 48000Hz 2ch s16le (2 bytes per sample)
Starting playback...
Movie-Aspect is 1.87:1 - prescaling to correct movie aspect.
VO: [null] 1024x544 => 1024x548 Planar YV12  [zoom]
A:   0.0 V:   0.0 A-V:  0.044 ct:  0.000   0/  0 ??% ??% ??,?% 0 0

Exiting... (End of file)

AUDIO: 48000 Hz, 2 ch, s16le, 384.0 kbit/25.00% (ratio: 48000->192000)

С учетом того, что дороги сам собирал, знаю какая из них в скольки каналах.

Rodegast писал(а):
10.01.2011 15:59
В контейнеры avi, mp4, flv mencoder паковать умеет, ничего стороннего использовать не надо.

Это я тоже знаю. С опциями нужно нормально разобраться.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение alkesta »

Сори, не очень знаком с mencoder, но несколько вопросов/комментов по поводу скрипта...
  • - А он (mecoder) профили H264 не поддерживает? Вместо того, чтобы все параметры кодирования перечислять.
    - level=5.1 (если это то, о чем я думаю) -это же для заоблачных разрешений, а у вас 640:480
    - -sws 10 вроде пару раз видел, что портит картинку и рекомендуют использовать -sws 9

Спасибо сказали:
Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение Rodegast »

> А он (mecoder) профили H264 не поддерживает?

Да. Но это недокументированная возможность:

mencoder ./1.avi -ovc x264 x264enc preset=ultrafast -oac copy -o ~/1.avi
Спасибо сказали:
Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение alkesta »

Rodegast писал(а):
11.01.2011 19:11
x264enc preset=ultrafast

А profile=high (baseline, main и т.п.)? Все таки cтандарт MPEG-4 Part 10 предусматривает конкретные профили ориентированые на конкретные приложения/оборудование, а приложения/оборудование ориентируется в свою очередь на эти профили. А то где не глянешь везде кастомные настройки, без оглядки на стандарт.
Спасибо сказали:
Аватара пользователя
Red Gremlin
Сообщения: 512
Статус: самоучка
ОС: Rosa 2016 Fresh

Re: Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение Red Gremlin »

yamah писал(а):
09.01.2011 22:49
Согласен, что можно вручную указывать. Тем более, что в скрипте пока так и забито.
Но хотел было прикрутить скрипт из этой темы, а mplayer косячит.

Заменить на такое:

Код: Выделить всё

numofchannels=`mplayer -identify -vo null -ao null "$input" -frames 0 2>/dev/null | grep -m 1 'AUDIO_NCH' | cut -d '=' -f 2`
"В мире есть случайность, есть предопределенность и есть то, что ты планируешь совершить."
Спасибо сказали:
Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение Rodegast »

> А profile=high (baseline, main и т.п.)?

Проверил вроде работают.

yamah Если mplayer что то путает то получай инфу из mediainfo.
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Опции lavc при перекодировании mplayer-ом, субтитры и сборка в AVI.

Сообщение yamah »

alkesta писал(а):
11.01.2011 17:39
Сори, не очень знаком с mencoder, но несколько вопросов/комментов по поводу скрипта...
  • - А он (mecoder) профили H264 не поддерживает? Вместо того, чтобы все параметры кодирования перечислять.
    - level=5.1 (если это то, о чем я думаю) -это же для заоблачных разрешений, а у вас 640:480
    - -sws 10 вроде пару раз видел, что портит картинку и рекомендуют использовать -sws 9

Да кроп там просто так такой стоит. Как я писал уже, подход к написанию скрипта выбрал обратный - сначала реализовываю функционал, а потом уже качество обработки

Red Gremlin писал(а):
12.01.2011 14:00
yamah писал(а):
09.01.2011 22:49
Согласен, что можно вручную указывать. Тем более, что в скрипте пока так и забито.
Но хотел было прикрутить скрипт из этой темы, а mplayer косячит.

Заменить на такое:

Код: Выделить всё

numofchannels=`mplayer -identify -vo null -ao null "$input" -frames 0 2>/dev/null | grep -m 1 'AUDIO_NCH' | cut -d '=' -f 2`


Спасибо, попробую.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали: