2

Я пытаюсь закодировать некоторые эпизоды Firefly, чтобы моя жена могла смотреть их на своем нетбуке (без DVD-привода!).

Я использую dvd::rip и transcode, кажется, случайно зависает во время кодирования в конце файла.

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

Конкретная команда:
transcode -H 10 -a 0 -x vob -i ../vob/001-C006 -w 1437,50 -b 160,0,2 -s 1.496 --a52_drc_off -J normalize -f 30,4 -M 2 --export_par 118,100 -y xvid,null --psu_mode --nav_seek firefly1-001-C006-nav.log --no_split --progress_meter 1 --progress_rate 25 -o /dev/null -R 1

Последняя строка, которую он печатает:
encoding frames [0-5900], 59.76 fps, CFT: 0:03:16, (13| 0| 7)


Я также попытался сделать 1-проходное кодирование:
transcode -H 10 -a 0 -x vob -i ../vob/001-C002 -w 5 -b 160,0,2 -s 1.496 --a52_drc_off -J normalize -f 30,4 -M 2 --export_par 118,100 -y xvid,null --psu_mode --no_split --progress_meter 1 --progress_rate 1 -o ../avi/001/firefly1-001-C002.avi

иногда он будет зависать после печати:
encoding frames [0-10545], 41.21 fps, CFT: 0:05:51, (17| 0| 3)

И иногда это будет завершено:
[transcode] encoded 10546 frames (-2104 dropped, 0 cloned), clip length 351.88 s


Есть ли какая-либо отладка / дополнительная информация, которую я могу включить? У кого-нибудь есть предложения?

Распространение : openSuSE 11.2

Ядро uname -a: Linux challenger 2.6.31.8-0.1-desktop #1 SMP PREEMPT 2009-12-15 23:55:40 +0100 i686 i686 i386 GNU/Linux

Версия транскодирования : transcode-1.1.5-0.pm.8.3.i586

3 ответа3

2

Вы пробовали другой инструмент, например, ручной тормоз? Если он зависает в одном и том же месте, возможно, у вас есть царапины на диске, которые мешают получению качественных копий исходных данных.

Другими инструментами кодирования Linux, которые можно попробовать, будут ffmpeg и mencoder.


Обновление: прочитайте FAQ Transcode о различных проблемах. В частности, существует известная проблема, которая приводит к зависаниям:

У меня все еще есть проблема, и она не обсуждалась раньше.

Если ваша проблема заключается в том, что транскод "зависает" немедленно или даже через некоторое время, вы можете столкнуться с проблемой почтенной старой версии потока.

Если выполнить транскодирование следующим образом: "env LD_ASSUME_KERNEL=2.4.0 transcode ..." решает проблему, то это проблемы с версией потока, а не транскодирование, это ошибка.

Смотрите: http://people.redhat.com/drepper/assumekernel.html

Этот совет кажется старым и, возможно, устарел, но попробовать не помешает. Я не уверен, что означает «старая почтенная версия»; Я предполагаю, что это относится к несоответствию между библиотекой потоков в вашей системе и библиотекой потоков, используемой для компиляции пакета транскодирования , который вы используете. (Я также предполагаю, что вы установили transcode в виде двоичного пакета, возможно, через менеджер пакетов вашей системы, возможно, скачанный из нестандартного репозитория?)

Если это так, вы можете избавиться от несоответствия, скомпилировав свою собственную локальную копию транскода. (Для менеджеров пакетов на основе RPM это влечет за собой поиск SRPM, который использовался для компиляции вашего двоичного пакета транскодирования, установку любых пакетов, необходимых для компиляции транскодирования, и использование RPM для создания нового пакета транскодирования.)

1

Действительно старая тема, но поскольку у меня была та же проблема (перекодировка зависала в конце каждой главы, хотя я не использую DVD:RIP в качестве драйвера для перекодировки), я думаю, что, возможно, мое хакерское решение может кому-то помочь. Я обнаружил, что транскод просто засыпает, возможно, ожидая сигнала, который никогда не приходит или приходит слишком рано. Поэтому я обнаруживаю, когда это происходит, и уничтожаю транскод с помощью следующего скрипта bash:

#!/bin/bash
while ps -C transcode|grep -q transcode; do
  # wait for transcode to actually start encoding
  sleep 15
  # detect when it goes to sleep
  while ps -C transcode --no-headers -o "stat"| grep -q -v "^S"; do
    sleep 1
  done
  echo "transcode process sleeping, waiting ten seconds"
  # sometimes seems to just get the signa/whatever it's waiting for
  sleep 10
  if ps -C transcode --no-headers -o "stat"| grep -q "^S"; then
    echo "still sleeping, killing transcode"
    killall transcode
  fi
  # wait here so that the driver program has a chance of restarting it
  sleep 10
done

Этот скрипт запускается одновременно с программой драйвера и, в основном, заменяет вас, просто просматривая список процессов darn, чтобы увидеть, не переходит ли транскод снова. Есть наверняка лучшие способы написать это, но это только работает для меня, и я ленивый :-)

-1

может быть, это не связано с самой проблемой, но вы использовали -o /dev/null , что (если я не ошибаюсь) это как бы сказать "пусть отбросит мой вывод" ...Я хотел бы попробовать -o ~/Desktop/firefly_001.avi или любое другое расширение, которое вы пожелаете.

Надеюсь услышать тебя позже,

С уважением

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