diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2018-06-11 18:38:53 +0200 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2018-06-11 18:38:53 +0200 |
| commit | 02aa31efc0a295e74cdb322dd5657fbf85eefaf7 (patch) | |
| tree | b428fee6ef94aa66fd7d23d7fc36654c832302c0 | |
| parent | dc637663c59dd0f57d0c13d091d5e33cf0b2e490 (diff) | |
| download | nixos-02aa31efc0a295e74cdb322dd5657fbf85eefaf7.tar nixos-02aa31efc0a295e74cdb322dd5657fbf85eefaf7.tar.gz nixos-02aa31efc0a295e74cdb322dd5657fbf85eefaf7.tar.bz2 nixos-02aa31efc0a295e74cdb322dd5657fbf85eefaf7.tar.xz nixos-02aa31efc0a295e74cdb322dd5657fbf85eefaf7.zip | |
try both enumeration modes
| -rw-r--r-- | odin/strm/download_youtube | 184 |
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 | ||
