1 votos

¿Cómo ejecutar VLC desde la terminal en Android y también pasar un archivo de subtítulos?

Sé cómo lanzar un video en VLC desde la terminal en Android de la siguiente manera:

am start -n org.videolan.vlc/org.videolan.vlc.gui.video.VideoPlayerActivity -a android.intent.action.VIEW -d file:////storage/emulated/0/VideoToPlay.mp4

Sin embargo, también tengo un archivo de subtítulos SubStation Alpha que acompaña a este video, que en este ejemplo podría llamarse subtitles.ssa.

¿Existe alguna manera de usar el comando "am start" (o cualquier otro comando de la terminal de Android, por ese motivo) para indicarle a VLC que se lance el video VideoToPlay.mp4 también con los subtítulos subtitles.ssa?

Esto es posible en Linux añadiendo un argumento --sub-file /ruta/a/subtitles.ssa a la línea de comando de la terminal que lanzaría un video a través de VLC, y me pregunto si hay alguna forma de hacerlo en la terminal en Android también.

Gracias de antemano.

1voto

Avanst Puntos 513

Pensé en una forma de hacer que un script de Android lograra esto:

(1) crea un directorio vacío llamado "work";

(2) copia el archivo VideoToPlay.mp4 en ese directorio de trabajo;

(3) copia el archivo *.ssa en el mismo directorio con el nombre "VideoToPlay.ssa";

(4) ejecuta el comando "am start" que publiqué arriba, apuntando al VideoToPlay.mp4

Esto funciona porque mientras haya un archivo .ssa en el mismo directorio que el video y con el mismo nombre base que el video, VLC aplicará los subtítulos en ese archivo .ssa al video especificado.

Aquí está mi script para lograr esto:

#!/system/bin/sh                                                                                                                                      

workdir=/sdcard/vidwork
amstart=( /system/bin/am start -n org.videolan.vlc/org.videolan.vlc.gui.video.VideoPlayerActivity -a android.intent.action.VIEW -d )
amstop=( /system/bin/am force-stop org.videolan.vlc )

# Si VLC está en ejecución, mátalo.
"${amstop[@]}" 1>/dev/null 2>&1

[[ $# -lt 1 ]] && {
  echo "                                                                                                                                              
uso: ${0##*/} video-a-reproducir [ archivo-de-subtítulos ]                                                                                                       
"
  exit 1
}

videopath="${1}"
shift

[[ -r "${videopath}" ]] ||  {
  echo "                                                                                                                                              
El video no existe: ${videopath}                                                                                                                     
"
  exit 1
}

videoname="${videopath##*/}"

case "${videoname}" in
*.mp4|*.mkv)
  ;;
*) 
  echo "                                                                                                                                              
El video debe ser mp4 o mkv                                                                                                                              
"
  exit 1
  ;;
esac

videobasename="$( echo "${videoname}" | /system/bin/sed -e 's/\.mp4$//i' -e 's/\.mkv$//i' )"

/system/bin/rm -rf "${workdir}" 1>/dev/null 2>&1
/system/bin/mkdir -p "${workdir}" 1>/dev/null 2>&1

[[ $# -gt 0 ]] && {
  subpath="${1}"
  shift
  [[ -r ${subpath} ]] || {
    echo "                                                                                                                                            
El archivo de subtítulos no existe: ${subpath}                                                                                                               
"
    exit 1
  }
  /bin/cp "${subpath}" "${workdir}/${videobasename}.ssa"
}

/bin/cp "${videopath}" "${workdir}"

cmd=( "${amstart[@]}" "file:///${workdir}/${videoname}" )

{
  "${cmd[@]}"
} 1>/dev/null 2>&1

exit 0

PD: Este script necesita ejecutarse como root para que el comando /system/bin/am force-stop ... funcione correctamente.

Por lo tanto, suponiendo que este script está almacenado como /sdcard/runvid.sh, debe ejecutarse en un dispositivo rooteado de la siguiente manera ...

/system/bin/su -c /sdcard/runvid.sh ruta-al-archivo-de-video [ ruta-al-archivo-de-subtítulos ]

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X