Skip to content

Instantly share code, notes, and snippets.

@lyshie
Last active July 25, 2019 15:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lyshie/7ac1e224277c7f6be9fca3e8fe240b4c to your computer and use it in GitHub Desktop.
Save lyshie/7ac1e224277c7f6be9fca3e8fe240b4c to your computer and use it in GitHub Desktop.
四錄行車記錄器播放工具
#!/bin/sh
######## 影片路徑 (L左 R右 F前 B後)
VID_L="/run/media/lyshie/SE1/DCIM/VID_L"
VID_R="/run/media/lyshie/SE1/DCIM/VID_R"
VID_F="/run/media/lyshie/SE/DCIM/VID_F"
VID_B="/run/media/lyshie/SE/DCIM/VID_B"
######## 檔案名稱
######## /run/media/lyshie/SE/DCIM/VID_F/VID_20190616_204734.(ts|kml) => 2019-06-16 20:47:34
filename=$(basename $1 | perl -pe 's/VID_(\d{4,4})(\d{2,2})(\d{2,2})_(\d{2,2})(\d{2,2})(\d{2,2})\.(ts|kml)/$1-$2-$3 $4:$5:$6/g')
echo ${filename} # 2019-06-16 20:47:34
######## 紀錄檔案名稱
vid_left="${VID_L}/${filename}*.ts"
vid_right="${VID_R}/${filename}*.ts"
vid_front="${VID_F}/${filename}*.ts"
vid_back="${VID_B}/${filename}*.ts"
######## 紀錄延遲播放的時間
delay_left="0"
delay_right="0"
delay_front="0"
delay_back="0"
######## 五秒內的影片都視為同一時間
for i in $(seq 0 5); do
next=$(date --date="${filename} ${i} second" "+%Y%m%d_%H%M%S") # 五秒後
ago=$(date --date="${filename} ${i} second ago" "+%Y%m%d_%H%M%S") # 五秒前
#### 左鏡頭影片
if [ -f "${VID_L}/VID_${next}.ts" ]; then
vid_left="${VID_L}/VID_${next}.ts" # /run/media/lyshie/SE1/DCIM/VID_L/VID_20190616_204734.ts
delay_left=$(echo "${next}" | sed -e 's/_//g') # 20190616204734
fi
if [ -f "${VID_L}/VID_${ago}.ts" ]; then
vid_left="${VID_L}/VID_${ago}.ts"
delay_left=$(echo "${ago}" | sed -e 's/_//g')
fi
#### 右鏡頭影片
if [ -f "${VID_R}/VID_${next}.ts" ]; then
vid_right="${VID_R}/VID_${next}.ts"
delay_right=$(echo "${next}" | sed -e 's/_//g')
fi
if [ -f "${VID_R}/VID_${ago}.ts" ]; then
vid_right="${VID_R}/VID_${ago}.ts"
delay_right=$(echo "${ago}" | sed -e 's/_//g')
fi
#### 前鏡頭影片
if [ -f "${VID_F}/VID_${next}.ts" ]; then
vid_front="${VID_F}/VID_${next}.ts"
delay_front=$(echo "${next}" | sed -e 's/_//g')
fi
if [ -f "${VID_F}/VID_${ago}.ts" ]; then
vid_front="${VID_F}/VID_${ago}.ts"
delay_front=$(echo "${ago}" | sed -e 's/_//g')
fi
#### 後鏡頭影片
if [ -f "${VID_B}/VID_${next}.ts" ]; then
vid_back="${VID_B}/VID_${next}.ts"
delay_back=$(echo "${next}" | sed -e 's/_//g')
fi
if [ -f "${VID_B}/VID_${ago}.ts" ]; then
vid_back="${VID_B}/VID_${ago}.ts"
delay_back=$(echo "${ago}" | sed -e 's/_//g')
fi
done
######## 取得時間最早的影片,以此當基準
mini=$(echo -e "${delay_left}\n${delay_right}\n${delay_front}\n${delay_back}" | sort -n | head -n 1)
######## 計算須延遲的秒數
delay_left=$(echo "($delay_left - $mini) % 10" | bc)
delay_right=$(echo "($delay_right - $mini) % 10" | bc)
delay_front=$(echo "($delay_front - $mini) % 10" | bc)
delay_back=$(echo "($delay_back - $mini) % 10" | bc)
echo "$delay_left $delay_right $delay_front $delay_back"
#exit
######## 關閉所有播放中的影片
pkill -x mpv
######## 前鏡頭播放
( sleep $delay_front; mpv --no-border --geometry="960x500+480+0" ${vid_front} ) &
######## 後鏡頭播放
( sleep $delay_back; mpv --no-border --geometry="960x500+480+500" ${vid_back} ) &
######## 左鏡頭播放
( sleep $delay_left; mpv --no-border --geometry="480x500+0+0" ${vid_left} ) &
######## 右鏡頭播放
( sleep $delay_right; mpv --no-border --geometry="480x500+1440+0" ${vid_right} ) &
#!/bin/sh
#### Usage: ./join_mp4.sh /run/media/user/56E7-87E2/DCIM/F/FILE190704-143*.MOV
tmpfile=$(mktemp)
for f in "$@"; do
echo "file '${f}'" >> "${tmpfile}"
done
# ffmpeg -f concat -safe 0 -i "${tmpfile}" -vcodec copy -an -strict experimental "${tmpfile}.mp4"
ffmpeg -f concat -safe 0 -i "${tmpfile}" -vcodec copy -acodec aac -strict experimental "${tmpfile}.mp4"
unlink "${tmpfile}"

縮時影片

  • 先使用 AvidemuxFFmpeg 去除聲音
  • 使用 FFmpeg 進行縮時
$ ffmpeg -i video_no_audio.mp4 -filter:v "setpts=PTS/6" -shortest -an output.mp4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment