LINUX.ORG.RU

Обработка файлов с пробелами в именах в цикле

 


2

1

Народ, помогите найти ошибку в скрипте конвертации. Следующий код работает:

ffmpeg -i "Korn - A.D.I.D.A.S..vob" "../Korn - A.D.I.D.A.S..mkv" 

А вот этот нет:

$ {
> find * -print0 | while read -d $'\0' f; do
>    echo "$f"
>    echo "$f" "../$(basename "$f" .vob).mkv"
>    ffmpeg -i "$f" "../$(basename "$f" .vob).mkv"
>    break 
> done
> } 2>&1 | head -n 100
Korn - A.D.I.D.A.S..vob
Korn - A.D.I.D.A.S..vob ../Korn - A.D.I.D.A.S..mkv
ffmpeg version 2.3.3 Copyright (c) 2000-2014 the FFmpeg developers
  built on Aug 17 2014 17:11:34 with gcc 4.9.1 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --enable-avisynth --enable-avresample --enable-decoder=atrac3 --enable-decoder=atrac3p --enable-dxva2 --enable-fontconfig --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-pic --enable-postproc --enable-runtime-cpudetect --enable-shared --enable-swresample --enable-vdpau --enable-version3 --enable-x11grab
  libavutil      52. 92.100 / 52. 92.100
  libavcodec     55. 69.100 / 55. 69.100
  libavformat    55. 48.100 / 55. 48.100
  libavdevice    55. 13.102 / 55. 13.102
  libavfilter     4. 11.100 /  4. 11.100
  libavresample   1.  3.  0 /  1.  3.  0
  libswscale      2.  6.100 /  2.  6.100
  libswresample   0. 19.100 /  0. 19.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mpeg, from 'Korn - A.D.I.D.A.S..vob':
  Duration: 00:02:34.46, start: 299.883611, bitrate: 4203 kb/s
    Stream #0:0[0x1bf]: Data: dvd_nav_packet
    Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p(tv), 352x480 [SAR 20:11 DAR 4:3], max. 6000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:2[0x81]: Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s
    Stream #0:3[0x80]: Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s
[libx264 @ 0x2039540] using SAR=20/11
[libx264 @ 0x2039540] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x2039540] profile High, level 2.1
[libx264 @ 0x2039540] 264 - core 142 r2397M b7a50c1 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to '../Korn - A.D.I.D.A.S..mkv':                                                                                                              
  Metadata:                                                                                                                                                        
    encoder         : Lavf55.48.100                                                                                                                                
    Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv420p, 352x480 [SAR 20:11 DAR 4:3], q=-1--1, 29.97 fps, 1k tbn, 29.97 tbc                            
    Metadata:                                                                                                                                                      
      encoder         : Lavc55.69.100 libx264
    Stream #0:1: Audio: vorbis (libvorbis) (oV[0][0] / 0x566F), 48000 Hz, 5.1(side), fltp
    Metadata:
      encoder         : Lavc55.69.100 libvorbis
Stream mapping:
  Stream #0:1 -> #0:0 (mpeg2video (native) -> h264 (libx264))
  Stream #0:2 -> #0:1 (ac3 (native) -> vorbis (libvorbis))
Press [q] to stop, [?] for help
[ac3 @ 0x1d114e0] frame sync error
Error while decoding stream #0:2: Invalid data found when processing input
[libvorbis @ 0x203a440] Queue input is backward in time
[matroska @ 0x1d11e00] Non-monotonous DTS in output stream 0:1; previous: 49, current: 39; changing to 49. This may result in incorrect timestamps in the output file.
stream #1:7 fps=0.0 q=29.0 size=     327kB time=00:00:03.69 bitrate= 725.0kbits/s    
  keyframe=1
  duration=0.033
  dts=326.726  pts=326.827
  size=80008
[libx264 @ 0x2039540] frame= 750 QP=25.14 NAL=2 Slice:P Poc:58  I:14   P:375  SKIP:271  size=2042 bytes
[matroska @ 0x1d11e00] Writing block at offset 3525046, size 677, pts 25063, dts 25063, duration 21, flags 128
[matroska @ 0x1d11e00] Writing block at offset 3525730, size 670, pts 25084, dts 25084, duration 21, flags 128
[matroska @ 0x1d11e00] Writing block at offset 3526407, size 2042, pts 25158, dts 25092, duration 33, flags 0
stream #1:
  keyframe=0
  duration=0.033
  dts=326.760  pts=326.760
  size=9536
[libx264 @ 0x2039540] frame= 751 QP=24.67 NAL=2 Slice:P Poc:62  I:40   P:410  SKIP:210  size=6337 bytes
[matroska @ 0x1d11e00] Writing block at offset 3528456, size 712, pts 25105, dts 25105, duration 21, flags 128
[matroska @ 0x1d11e00] Writing block at offset 3529175, size 6337, pts 25225, dts 25125, duration 33, flags 0
stream #2:
  keyframe=1
  duration=0.032
  dts=326.636  pts=326.636
  size=1792
stream #1:
  keyframe=0
  duration=0.033
  dts=326.793  pts=326.793
  size=8664
[libx264 @ 0x2039540] frame= 752 QP=26.53 NAL=0 Slice:B Poc:60  I:1    P:242  SKIP:395  size=1208 bytes
[matroska @ 0x1d11e00] Writing block at offset 3535519, size 127, pts 25127, dts 25127, duration 12, flags 128
[matroska @ 0x1d11e00] Writing block at offset 3535653, size 176, pts 25139, dts 25139, duration 3, flags 128
[matroska @ 0x1d11e00] Writing block at offset 3535836, size 149, pts 25141, dts 25141, duration 3, flags 128
[matroska @ 0x1d11e00] Writing block at offset 3535992, size 162, pts 25144, dts 25144, duration 3, flags 128
[matroska @ 0x1d11e00] Writing block at offset 3536161, size 169, pts 25147, dts 25147, duration 3, flags 128
[matroska @ 0x1d11e00] Writing block at offset 3536337, size 181, pts 25149, dts 25149, duration 3, flags 128
[matroska @ 0x1d11e00] Writing block at offset 3536525, size 710, pts 25152, dts 25152, duration 12, flags 128
[matroska @ 0x1d11e00] Writing block at offset 3537242, size 1208, pts 25192, dts 25158, duration 33, flags 0
stream #1:

Потом туча таких же сообщений и останов на строке:

  duration=0.032
  dts=330.828  pts=330.828
  size=1792
stream #2:
  keyframe=1
  duration=0.032
  dts=330.860  pts=330.860
  size=1792
stream #2:
  keyframe=1
  duration=0.032
  dts=330.892  pts=330.892
  size=1792

Enter command: <target>|all <time>|-1 <command>[ <argument>]

Ответ на: комментарий от anonymous

Этот скрипт не обрабатывает толком ни одного файла, break вставлен на этапе отладки, что бы отловить сообщения.

omegatype ★★★
() автор топика

Он жалуется на данные внутри файла. Скорее всего ты его уже затёр предыдущими экспериментами.

anonymous
()
Ответ на: комментарий от anonymous

basename ... .vob

wat

У меня в системе код:

  out=$(basename $inp).mkv
  echo $inp $out
выдает:
./Korn - Here to Stay.vob Korn - Here to Stay.vob.mkv
и не убирает старое расширение. Если же использовать вариант вызова basename с указанием расширения как второго аргумента, работает правильно.

omegatype ★★★
() автор топика
Ответ на: комментарий от anonymous

find -type f -iname *.vob

*.vob

Оно же раскроется башем. Ну и вместо этого г-на можно сделать

shopt -s extglob nocaseglob
for inp in **/*.vob; do
    out=../"${inp##*/}".mkv
    ffmpeg -i "$inp" "$out"
done

anonymous
()
Ответ на: комментарий от S_Paul

Что-то не работает твоя магия.

УМВР, если мы про bash. sh-вариант:

out="${out%.vob}.mkv"

А я просто привык к «echo ***| итд»

Что, если out="-n" (в данном случае не может быть, да) или содержит переводы строк?

anonymous
()
Ответ на: комментарий от anonymous

bash
Так работает, да.

А зачем в названии файла переводы строк? Применительно к данной задаче. Будет другая задача - будем думать.

S_Paul ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.