1 votes

Exécuter VLC à partir de la console dans Android et également passer un fichier de sous-titres?

Je sais comment lancer une vidéo dans VLC à partir de la ligne de commande sous Android comme suit :

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

Cependant, j'ai aussi un fichier de sous-titres SubStation Alpha qui accompagne cette vidéo, qui dans cet exemple pourrait s'appeler sous-titres.ssa.

Existe-t-il un moyen d'utiliser la commande "am start" (ou toute autre commande shell Android, d'ailleurs) pour indiquer à VLC de lancer la vidéo VideoToPlay.mp4 également avec les sous-titres sous-titres.ssa ?

Cela est faisable dans Linux en ajoutant un argument --sub-file /chemin/vers/sous-titres.ssa à la ligne de commande shell qui lancerait une vidéo via VLC, et je me demande s'il y a un moyen de le faire également dans le shell sur Android.

Merci d'avance.

1voto

Avanst Points 513

J'ai pensé à une façon d'obtenir un script Android pour accomplir ceci :

(1) créer un répertoire vide "work" ;

(2) copier le fichier VideoToPlay.mp4 dans ce répertoire work ;

(3) copier le fichier *.ssa dans le même répertoire sous le nom "VideoToPlay.ssa" ;

(4) exécuter la commande "am start" que j'ai postée ci-dessus, en pointant vers VideoToPlay.mp4

Cela fonctionne parce que tant qu'il y a un fichier .ssa dans le même répertoire que la vidéo et avec le même nom de base que la vidéo, VLC appliquera les sous-titres de ce fichier .ssa à la vidéo spécifiée.

Voici mon script pour accomplir ceci :

#!/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 cours d'exécution, le tuer.
"${amstop[@]}" 1>/dev/null 2>&1

[[ $# -lt 1 ]] && {
  echo "                                                                                                                                              
usage: ${0##*/} video-to-play [ subtitle-file ]                                                                                                       
"
  exit 1
}

videopath="${1}"
shift

[[ -r "${videopath}" ]] ||  {
  echo "                                                                                                                                              
La vidéo n'existe pas : ${videopath}                                                                                                                     
"
  exit 1
}

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

case "${videoname}" in
*.mp4|*.mkv)
  ;;
*) 
  echo "                                                                                                                                              
La vidéo doit être en format mp4 ou 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 "                                                                                                                                            
Le fichier de sous-titres n'existe pas : ${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

PS : Ce script doit être exécuté en tant que root pour que la commande /system/bin/am force-stop ... fonctionne correctement.

Par conséquent, en supposant que ce script est stocké sous /sdcard/runvid.sh, il doit être exécuté sur un appareil rooté de la manière suivante ...

/system/bin/su -c /sdcard/runvid.sh chemin-vers-fichier-vidéo [ chemin-vers-fichier-sous-titres ]

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X