시청을 마친 영상에 기본 엠블럼을 추가하고 싶어요. 비디오 재생이 완료된 경우 스크립트를 실행하는 간단하고 수동이 아닌 방법이 있습니까? 모든 Linux(mint/ubuntu) 비디오 플레이어에 사용할 수 있습니다.
답변1
vlc --play-and-exit video.mp4 && echo "Terminated"
echo "Terminated"
실행하려는 실제 명령으로 대체하십시오 . 이는 &&
vlc가 오류 코드와 함께 종료되면 명령이 실행되지 않음을 의미합니다. 오류가 발생하더라도 명령을 실행하려면
vlc --play-and-exit video.mp4; echo "Terminated"
vlc에 더 많은 파일을 제공하면 명령이 실행됩니다.모든 미디어가 재생되면. 예를 들어,
vlc --play-and-exit s0.mp3 s1.mp4 && shutdown now
이는 두 파일이 재생된 후 시스템이 즉시 종료됨을 의미합니다.
당신이 원한다면~에 대한 조치를 수행하다각재생된 파일, 다음 쉘 스크립트를 사용할 수 있습니다(라고 부르겠습니다 play.sh
).
#!/bin/sh
for file in "$@"; do
vlc --play-and-exit "$file"
echo "File $file has been played."
done
그런 다음 다양한 파일에서 실행하십시오.
sh play.sh file1.mp3 'Me & You.mp4' 'file 3.wav'
적절한 경우 파일을 인용하는 것을 잊지 마십시오(특히 공백 및 특수 문자(예 &
: *
, 등)).
플래그 --play-and-exit
는 에서도 사용할 수 있습니다 cvlc
.
답변2
제가 요청한 이후로 제가 생각해낸 빠른 래퍼 기반 해킹을 공유하고 싶다고 생각했습니다. 다음 VLC 래퍼를 만들고 VLC가 아닌 직접 열 수 있는 비디오 파일을 설정했습니다. 한 번에 하나의 파일만 지원합니다. 파일을 재생하면서 vlc에서 움직이는 것이 끝까지 간다면, tag watched
영상의 약 60%를 시청했다면 마지막에 명령을 실행하게 됩니다.
#!/bin/bash
#This depends on the cli interface having been activated in the preferences
# This while loop feeds the `get_length` vlc cli command to cli every 0.1 s
(while :; do echo get_length; sleep 0.1 ; done) |
#Pass all arguments to vlc and set it up to be fed from the `get_length` while loop
/usr/bin/vlc "$@" |
ruby -n -e '
BEGIN {
cons_empty=0
nlines_read=0
}
#Strip vlc cli noise
$_=$_.sub(/^[> ]*/,"")
#Watch consecutive (cons) empty lines
if $_.match(/^\s*$/)
cons_empty += 1
else
#Assume each nonempty stdin line is the duration
duration = $_.chomp.to_i
cons_empty = 0
nlines_read += 1
end
#On 10 consecutive empty lines, assume the file has finished playing
if cons_empty == 10
time_watched = nlines_read * 0.1
p time_watched: time_watched, duration: duration
ret = (time_watched > 0.6 * duration) ? 1 : 0
exit ret
end
' ||
tag watched "$@" #1 exit means finished watching
아름다운 코드라기보다는 효과가 있지만, 단지 성가심을 빠르게 해결하는 방법일 뿐입니다.
종속성:
bash, ruby, +를 tag watched
실제 태그 지정 명령으로 바꾸세요.