summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--odin/strm/download_youtube184
1 files changed, 102 insertions, 82 deletions
diff --git a/odin/strm/download_youtube b/odin/strm/download_youtube
index 05a8374d..29d54872 100644
--- a/odin/strm/download_youtube
+++ b/odin/strm/download_youtube
@@ -215,90 +215,110 @@ printf ">>> %s <<<\n %s\n" "${msgId}" "${message}"
215 215
216 ext=${extensions[1]} 216 ext=${extensions[1]}
217 filename=${filename%.*}.${ext} 217 filename=${filename%.*}.${ext}
218 typeset -a args
219 args=(-y)
220 typeset -a prePass
221 prePass=()
222 typeset -a cargs
223 cargs=()
224 typeset -a p1args
225 p1args=()
226 typeset -a p2args
227 p2args=()
228 for formatKey (${(k)fileInfo}); do
229 [[ ${formatKey} =~ "stream.([0-9]+).codec_type" ]] || continue
230 local i=$match[1]
231 local cType=${fileInfo[${formatKey}]}
232 local cName=${fileInfo[stream.${i}.codec_name]}
233
234 printf "Stream %d: %s (%s)\n" ${i} ${cName} ${cType}
235
236 if [[ ${cType} == "video" ]]; then
237 if [[ ${ext} == "mkv" ]]; then
238 case ${cName} in
239 h264|vp9|png)
240 cargs+=(-c:${i} copy)
241 ;;
242 *)
243 # p1args=(-pass 1 -threads 8 -speed 4 -tile-columns 6 -frame-parallel 1)
244 # prePass+=(-c:${i} libvpx-vp9 -b:${i} 0 -crf:${i} 33)
245 # p2args+=(-pass 2 -threads 8 -speed 2 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25)
246 # cargs+=(-c:${i} libvpx-vp9 -b:${i} 0 -crf:${i} 33)
247 cargs+=(-c:${i} libvpx-vp9 -b:${i} 2M -threads 8 -tile-columns 6 -frame-parallel 1)
248 ;;
249 esac
250 elif [[ ${ext} == "mp4" ]]; then
251 case ${cName} in
252 mpeg|h264)
253 cargs+=(-c:${i} copy)
254 ;;
255 *)
256 p2args+=(-strict -2)
257 cargs+=(-c:${i} libx264)
258 ;;
259 esac
260 fi
261 elif [[ ${cType} == "audio" ]]; then
262 if [[ ${ext} == "mkv" ]]; then
263 if [[ ( ${cName} == opus || ${cName} == flac || ${cName} == vorbis ) && "${bare_amp}" -eq 0 ]]; then
264 cargs+=(-c:${i} copy)
265 else
266 p2args+=(-vbr on -compression_level 10)
267 cargs+=(-c:${i} libopus -b:${i} 256K)
268 fi
269 elif [[ ${ext} == "mp4" ]]; then
270 if [[ ${cName} == aac && "${bare_amp}" -eq 0 ]]; then
271 cargs+=(-c:${i} copy)
272 else
273 cargs+=(-c:${i} aac)
274 fi
275 fi
276 fi
277 done
278
279 [[ "${bare_amp}" -ne 0 ]] && p2args+=(-af "${amp}")
280
281 if [[ $#prePass -gt 0 ]]; then
282 args+=(-v info -i ${tempfile})
283
284 oldPwd=${PWD}
285 cd $(mktemp -d --tmpdir "transcode.${0:t}.$$.XXXXXX")
286 cleanup rm -rfv -- ${PWD}
287
288 p1args+=(-an -f matroska)
289 print -- ${prePass} ${p1args}
290 ffmpeg ${args} ${prePass} ${p1args} -- /dev/null
291 218
292 print -- ${cargs} ${p2args} 219 typeset -a transModes
293 ffmpeg ${args} ${cargs} ${p2args} -- "${filename}" 220 transModes=(use-index enumerate)
294 221
295 cd ${oldPwd} 222 for transMode (${transModes}); do
296 else 223 typeset -a args
297 args+=(-v warning -i pipe:0) 224 args=(-y)
225 typeset -a prePass
226 prePass=()
227 typeset -a cargs
228 cargs=()
229 typeset -a p1args
230 p1args=()
231 typeset -a p2args
232 p2args=()
233
234 local j=0
235
236 for formatKey (${(k)fileInfo}); do
237 [[ ${formatKey} =~ "stream.([0-9]+).codec_type" ]] || continue
238 local i=$match[1]
239 local cType=${fileInfo[${formatKey}]}
240 local cName=${fileInfo[stream.${i}.codec_name]}
241
242 if [[ ${transMode} == "enumerate" ]]; then
243 i=${j}
244 j=$((j + 1))
245 fi
246
247 printf "Stream %d: %s (%s)\n" ${i} ${cName} ${cType}
248
249 if [[ ${cType} == "video" ]]; then
250 if [[ ${ext} == "mkv" ]]; then
251 case ${cName} in
252 h264|vp9|png)
253 cargs+=(-c:${i} copy)
254 ;;
255 *)
256 # p1args=(-pass 1 -threads 8 -speed 4 -tile-columns 6 -frame-parallel 1)
257 # prePass+=(-c:${i} libvpx-vp9 -b:${i} 0 -crf:${i} 33)
258 # p2args+=(-pass 2 -threads 8 -speed 2 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25)
259 # cargs+=(-c:${i} libvpx-vp9 -b:${i} 0 -crf:${i} 33)
260 cargs+=(-c:${i} libvpx-vp9 -b:${i} 2M -threads 8 -tile-columns 6 -frame-parallel 1)
261 ;;
262 esac
263 elif [[ ${ext} == "mp4" ]]; then
264 case ${cName} in
265 mpeg|h264)
266 cargs+=(-c:${i} copy)
267 ;;
268 *)
269 p2args+=(-strict -2)
270 cargs+=(-c:${i} libx264)
271 ;;
272 esac
273 fi
274 elif [[ ${cType} == "audio" ]]; then
275 if [[ ${ext} == "mkv" ]]; then
276 if [[ ( ${cName} == opus || ${cName} == flac || ${cName} == vorbis ) && "${bare_amp}" -eq 0 ]]; then
277 cargs+=(-c:${i} copy)
278 else
279 p2args+=(-vbr on -compression_level 10)
280 cargs+=(-c:${i} libopus -b:${i} 256K)
281 fi
282 elif [[ ${ext} == "mp4" ]]; then
283 if [[ ${cName} == aac && "${bare_amp}" -eq 0 ]]; then
284 cargs+=(-c:${i} copy)
285 else
286 cargs+=(-c:${i} aac)
287 fi
288 fi
289 fi
290 done
291
292 [[ "${bare_amp}" -ne 0 ]] && p2args+=(-af "${amp}")
293
294 local success=false
295
296 if [[ $#prePass -gt 0 ]]; then
297 args+=(-v info -i ${tempfile})
298
299 oldPwd=${PWD}
300 cd $(mktemp -d --tmpdir "transcode.${0:t}.$$.XXXXXX")
301 cleanup rm -rfv -- ${PWD}
302
303 p1args+=(-an -f matroska)
304 print -- ${prePass} ${p1args}
305 ffmpeg ${args} ${prePass} ${p1args} -- /dev/null
306
307 print -- ${cargs} ${p2args}
308 ffmpeg ${args} ${cargs} ${p2args} -- "${filename}" && success=true
309
310 cd ${oldPwd}
311 else
312 args+=(-v warning -i pipe:0)
313
314 print -- ${cargs} ${p2args}
315 pv -N "$(trimName "trans:" ${title})" ${tempfile} | ffmpeg ${args} ${cargs} ${p2args} -- "${filename}" && success=true
316 fi
298 317
299 print -- ${cargs} ${p2args} 318 if ${success}; then
300 pv -N "$(trimName "trans:" ${title})" ${tempfile} | ffmpeg ${args} ${cargs} ${p2args} -- "${filename}" 319 break
301 fi 320 fi
321 done
302 fi 322 fi
303 fi 323 fi
304 324