Flashsale Mua Sắm Trực Tuyến Giảm Giá

Giảm giá 42% dịch vụ Cloud Server cho anh em Vn-Zoom

Cài đặt thảo luận về Windows 10 ở Vn-Zoom
Khuyến Mại FlashSale

Vn-Zoom phiên bản beta

Kích hoạt Windows , Office miễn phí





Vn-Zoom Việt Nam Phiên bản Beta

  1. #1
    Tham gia
    Aug 2012
    Bài
    161
    Cảm ơn
    278
    Điểm
    79/55 bài viết

    Question Nhờ các bạn giúp đỡ tích hợp file BAT tạo Spectrogram vào Right-click menu trong Win

    Số là em đang dùng tool SOX để tạo quang phổ (spectrogram) hàng loạt cho các file audio (flac, wav, aiff, aif,...),
    do file APE không được SOX hỗ trợ tạo spectrogram, nên em kết hợp thêm ffmpeg để convert APE ra WAV rồi từ đó dùng SOX tạo ra spectrogram (Bên SOX cũng có chức năng convert APE ra WAV nhưng hơi lâu nên em không dùng).

    Dưới đây là file Batch (Em đã thiết lập sẵn System Variables trong Win cho cả SOX và ffmpeg nên nó chạy ngon lành):
    Code:
    @echo off
    :://sourceforge.net/projects/sox/
    :://ffmpeg.zeranoe.com/builds/
    chcp 65001
    setlocal enableextensions enabledelayedexpansion
    
    mkdir "%CD%\Spectrograms" 2> NUL
    mkdir "%CD%\Temp" 2> NUL
    attrib +h "%CD%\Temp"
    
    set MyFiles=*.flac *.wav *.aiff *.aif *.wv
    FOR %%A IN (%MyFiles%) DO sox "%%A" -n spectrogram -x 1100 -Y 768 -w Hann -S 0 -c " " -t "%%A" -o "Spectrograms/%%~nxA.png"
    
    set MyFiles2=*.ape *.m4a
    set MyTemp="%CD%\Temp\*.wav"
    FOR %%A IN (%MyFiles2%) DO ffmpeg -i "%%A" -y -map_metadata -1 -ar 44100 -acodec pcm_s16le -f wav "Temp/%%~nxA.wav" 
    FOR %%A IN (%MyTemp%) DO sox "%%A" -n spectrogram -x 1100 -Y 768 -w Hann -S 0 -c " " -t "%%~nA" -o "Spectrograms/%%~nA.png"
    rmdir "%CD%\Temp" /s /q
    
    Exit
    - Vấn đề ở đây là em muốn tích hợp file BAT trên vào menu phải trong Win (Right-click context menu), để khi chỉ cần bấm vào 1 thư mục hay nhiều thư mục cùng lúc (hoặc bấm vào file như FLAC, WAV, APE,...) thì tool SOX sẽ thực thi các lệnh trong BAT và tạo ra spectrogram.

    - Em đã tham khảo trong Regedit của Win (các mục minh họa bên dưới) để tích hợp file BAT vào menu phải nhưng nó không chạy!
    Có lẽ do file BAT của em cấu hình không đúng cho việc Right-click menu, em đã mày mò cả buổi nhưng không thành công nên em mạo muội vào đây nhờ các bác giúp đỡ!

    Em chân thành cảm ơn các bác trước ạ!

    [HKEY_CLASSES_ROOT\Directory\shell\Spectrograms]
    "Icon"="%SystemRoot%\\system32\\imageres.dll,-108"
    @="Spectrograms by SoX"
    [HKEY_CLASSES_ROOT\Directory\shell\Spectrograms\com mand]
    @="\"D:\\Softwares\\Tool\\Spectrograms.bat\" \"1%\" \"%V\""

    [HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers]
    [HKEY_CLASSES_ROOT\Folder\shellex\ContextMenuHandle rs]

    Cho định dạng file (.flac, .wav, .ape, m4a,...)
    HKEY_CLASSES_ROOT\.flac
    HKEY_CLASSES_ROOT\SystemFileAssociations\.flac
    HKEY_CLASSES_ROOT\SystemFileAssociations\.flac\She ll
    HKEY_CLASSES_ROOT\SystemFileAssociations\.flac\she llex\ContextMenuHandlers
    Thay đổi nội dung bởi vntieudao; 05-08-2018 lúc 17:30.



  2. #2
    Tham gia
    Mar 2011
    Đến từ
    http://intuicafe.com
    Bài
    3
    Cảm ơn
    0
    Điểm
    2/2 bài viết

    Default

    lên google tìm cho nhanh



  3. Có 1 thành viên cảm ơn ronintoan cho bài viết này:
    vntieudao (05-08-2018)

  4. #3
    Tham gia
    Aug 2012
    Bài
    161
    Cảm ơn
    278
    Điểm
    79/55 bài viết

    Default

    Trích ronintoan View Post
    lên google tìm cho nhanh
    Tích hợp file BAT vào menu chuột phải thì dễ rồi bác, vấn đề là khi bấm vào chuột phải và chọn nó thì không thực hiện được các lệnh đã biên soạn sẵn trong BAT...
    Code:
    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\Directory\shell\Spectrograms]
    "Icon"="%SystemRoot%\\system32\\imageres.dll,-108"
    @="Spectrograms by SoX"
    
    [HKEY_CLASSES_ROOT\Directory\shell\Spectrograms\command]
    @="\"D:\\Softwares\\Tool\\Spectrograms.bat\" \"1%\" \"%V\""
    Trước đó em cũng đã tìm trên Google, nếu tìm được câu trả lời thì em đã không vào đây nhờ các bác trong này rồi!
    Cảm ơn bác đã quan tâm!^_^



  5. #4
    Tham gia
    Aug 2011
    Đến từ
    HaNoi
    Bài
    2.518
    Cảm ơn
    72
    Điểm
    1.463/1.049 bài viết

    Default

    Batch của bạn chưa lấy tham số khi truyền vào Spectrograms.bat "giá trị truyền 1" "giá trị truyền 2" ...

    %1: giá trị truyền 1 có chứa ""
    %~1: giá trị truyền 1 không chứa ""
    tượng tự với 2 đên 255

    Muốn học batch script thì mần hết thì sẽ thành tài

    Cấu trúc, cú pháp chương trình batch: https://ss64.com/nt/syntax.html

    Tra cứu các tiện ích dòng lệnh hay dùng: https://ss64.com/nt/

    Spectrograms.bat sửa đổi lại như sau

    Spectrograms.bat "đường dẫn thư mục chứa file hoặc đường dẫn file muốn tạo spectrogram"

    Mình dựa theo ý tưởng của bạn trong batch. Lưu ý: batch sửa đổi không scan all sub folder nha, mà chỉ scan folder gốc được chọn mà thôi

    *.flac *.wav *.aiff *.aif *.wv => spectrogram

    *.ape *.m4a => *wav => spectrogram

    Code:
    @echo off
    cls
    
    if "%~x1" == "" goto folder
    
    :file
    cd /d "%~dp1"
    call :audiospec "%~1"
    goto end
    
    :folder
    cd /d "%~1"
    for %%a in (flac wav aiff aif wv ape m4a) do (
        for /f "tokens=*" %%b in ('dir /b "%~1\*.%%~a" 2^>nul') do (
            call :audiospec "%%~b"
    	)
    )
    
    :end
    goto :eof
    
    :audiospec
    md "Temp" 2>nul
    md "Spectrograms" 2>nul
    if "%~x1" == ".ape" ffmpeg -i "%~1" -acodec pcm_s16le -ar 44100 "Temp\%~n1.wav"
    if "%~x1" == ".m4a" ffmpeg -i "%~1" -acodec pcm_s16le -ar 44100 "Temp\%~n1.wav"
    if exist "Temp\%~n1.wav" sox "Temp\%~n1.wav" -n spectrogram -o "Spectrograms\%~nx1.png"
    if not exist "Temp\%~n1.wav" sox "%~1" -n spectrogram -o "Spectrograms\%~nx1.png"
    rd /s /q "Temp"
    exit /b

    Về cơ bản reg add menu content click-right thì đúng rồi
    Code:
    [HKEY_CLASSES_ROOT\Directory\shell\Spectrograms]
    "Icon"="%SystemRoot%\\system32\\imageres.dll,-108"
    @="Spectrograms by SoX"
    [HKEY_CLASSES_ROOT\Directory\shell\Spectrograms\com mand]
    @="\"D:\\Softwares\\Tool\\Spectrograms.bat\" \"1%\"

    Mà nên tắt UAC đi nha, batch muốn chạy ổn định trên các phiên bản 7/8/10 thì phải Run As Administrator mới đủ quyền mà UAC hay phang nó lắm
    Thay đổi nội dung bởi MaterSystem; 05-08-2018 lúc 17:48.



  6. Có 1 thành viên cảm ơn MaterSystem cho bài viết này:
    vntieudao (05-08-2018)

  7. #5
    Tham gia
    Aug 2012
    Bài
    161
    Cảm ơn
    278
    Điểm
    79/55 bài viết

    Default

    Trích MaterSystem View Post
    Batch của bạn chưa lấy tham số khi truyền vào Spectrograms.bat "giá trị truyền 1" "giá trị truyền 2" ...

    %1: giá trị truyền 1 có chứa ""
    %~1: giá trị truyền 1 không chứa ""
    tượng tự với 2 đên 255

    Muốn học batch script thì mần hết thì sẽ thành tài

    Cấu trúc, cú pháp chương trình batch: https://ss64.com/nt/syntax.html

    Tra cứu các tiện ích dòng lệnh hay dùng: https://ss64.com/nt/
    ------
    Mà nên tắt UAC đi nha, batch muốn chạy ổn định trên các phiên bản 7/8/10 thì phải Run As Administrator mới đủ quyền mà UAC hay phang nó lắm
    Em cảm ơn bác rất nhiều ạ!



  8. #6
    Tham gia
    Aug 2012
    Bài
    161
    Cảm ơn
    278
    Điểm
    79/55 bài viết

    Default

    Trích MaterSystem View Post
    Mình dựa theo ý tưởng của bạn trong batch. Lưu ý: batch sửa đổi không scan all sub folder nha, mà chỉ scan folder gốc được chọn mà thôi

    *.flac *.wav *.aiff *.aif *.wv => spectrogram

    *.ape *.m4a => *wav => spectrogram

    Code:
    @echo off
    cls
    
    if "%~x1" == "" goto folder
    
    :file
    cd /d "%~dp1"
    call :audiospec "%~1"
    goto end
    
    :folder
    cd /d "%~1"
    for %%a in (flac wav aiff aif wv ape m4a) do (
        for /f "tokens=*" %%b in ('dir /b "%~1\*.%%~a" 2^>nul') do (
            call :audiospec "%%~b"
    	)
    )
    
    :end
    goto :eof
    
    :audiospec
    md "Temp" 2>nul
    md "Spectrograms" 2>nul
    if "%~x1" == ".ape" ffmpeg -i "%~1" -acodec pcm_s16le -ar 44100 "Temp\%~n1.wav"
    if "%~x1" == ".m4a" ffmpeg -i "%~1" -acodec pcm_s16le -ar 44100 "Temp\%~n1.wav"
    if exist "Temp\%~n1.wav" sox "Temp\%~n1.wav" -n spectrogram -o "Spectrograms\%~nx1.png"
    if not exist "Temp\%~n1.wav" sox "%~1" -n spectrogram -o "Spectrograms\%~nx1.png"
    rd /s /q "Temp"
    exit /b
    Mà nên tắt UAC đi nha, batch muốn chạy ổn định trên các phiên bản 7/8/10 thì phải Run As Administrator mới đủ quyền mà UAC hay phang nó lắm
    Em đã thử nãy giờ nhưng có vẻ file BAT anh đưa bị lỗi gì đó nên khi run nó chớp 1 cái rồi tắt luôn ạ!
    Em đang mò mẫm mà chưa tìm ra lỗi... kiến thức em hạn chế nên khó quá!!



  9. #7
    Tham gia
    Aug 2011
    Đến từ
    HaNoi
    Bài
    2.518
    Cảm ơn
    72
    Điểm
    1.463/1.049 bài viết

    Default

    cái này không để kích chạy nha bạn mà run từ cmd hoặc click-right menu



    Spectrogram.rar (pass: thuthuatdoday)
    Download: https://www.fshare.vn/folder/W82DENTVOI8A

    À quên, file có tên tiếng Việt có dấu (unicode) thì bạn tự thêm chcp 65001 để hỗ trợ tiếng Việt nha (trên nền dos/cmd thì mình anti tiếng Việt có dấu nha, dos/cmd hỗ trợ chính ASCII và nhiều ứng dụng trên dos/cmd không hỗ trợ Unicode vì MS bỏ rơi cmd từ lâu rồi mà phát triển powershell) hoặc tự convert từ có dấu sang không dấu bằng phần mềm ReNamer

    Thay đổi nội dung bởi MaterSystem; 05-08-2018 lúc 20:07.



  10. Có 1 thành viên cảm ơn MaterSystem cho bài viết này:
    vntieudao (05-08-2018)

  11. #8
    Tham gia
    Aug 2012
    Bài
    161
    Cảm ơn
    278
    Điểm
    79/55 bài viết

    Default

    Trích MaterSystem View Post
    cái này không để kích chạy nha bạn mà run từ cmd hoặc click-right menu
    .....
    Đã chạy ngon lành rồi anh! Tuyệt vời!
    Một lần nữa em cảm ơn anh rất nhiều ạ!
    Thay đổi nội dung bởi vntieudao; 05-08-2018 lúc 20:05.



  12. #9
    Tham gia
    Aug 2012
    Bài
    161
    Cảm ơn
    278
    Điểm
    79/55 bài viết

    Default

    Trích MaterSystem View Post
    À quên, file có tên tiếng Việt có dấu (unicode) thì bạn tự thêm chcp 65001 để hỗ trợ tiếng Việt nha (trên nền dos/cmd thì mình anti tiếng Việt có dấu nha, dos/cmd hỗ trợ chính ASCII và nhiều ứng dụng trên dos/cmd không hỗ trợ Unicode vì MS bỏ rơi cmd từ lâu rồi mà phát triển powershell) hoặc tự convert từ có dấu sang không dấu bằng phần mềm ReNamer..
    Nhân tiện nói về Unicode, em tìm trên net thấy ở đây có 1 bác lập trình viên đã chế lại SoX hỗ trợ hoàn toàn Unicode, em có tải về thử nhưng mù tịt về cách dùng!
    //sourceforge.net/projects/muldersoft/files/SoX%20%28Unicode%29/

    Anh @MaterSystem nếu biết cách dùng nó thì chỉ em với, em sẽ thay thế file SoX gốc luôn.
    Thay đổi nội dung bởi vntieudao; 05-08-2018 lúc 20:39.



  13. #10
    Tham gia
    Aug 2011
    Đến từ
    HaNoi
    Bài
    2.518
    Cảm ơn
    72
    Điểm
    1.463/1.049 bài viết

    Default

    Lời khuyên của mình là không nên dùng tiếng Việt có dấu khi chơi với cmd/batch, đọc được file nhưng lúc lưu tên file tiếng Việt cũng sẽ có vấn đề hiển thị sai

    Bạn phải tìm 2 công cụ ffmpeg.exe và sox.exe được biên dịch hỗ trợ path unicode

    i386, avx, sse2, avx2 mỗi phiên bản được biên dịch tương thích với các tập lệnh mà CPU đời hỗ trợ

    bình thường hay lấy bản i386, đổi tên sox.i386.exe => sox.exe chép vào thư mục cài đặt

    Rồi thay thế các đoạn sau

    @echo off
    cls
    @echo off
    cls
    chcp 65001
    sox chcp 65001&&sox
    ffmpeg chcp 65001&&ffmpeg



  14. Có 1 thành viên cảm ơn MaterSystem cho bài viết này:
    vntieudao (06-08-2018)

  15. #11
    Tham gia
    Aug 2012
    Bài
    161
    Cảm ơn
    278
    Điểm
    79/55 bài viết

    Default

    Trích MaterSystem View Post
    Lời khuyên của mình là không nên dùng tiếng Việt có dấu khi chơi với cmd/batch, đọc được file nhưng lúc lưu tên file tiếng Việt cũng sẽ có vấn đề hiển thị sai

    Bạn phải tìm 2 công cụ ffmpeg.exe và sox.exe được biên dịch hỗ trợ path unicode

    i386, avx, sse2, avx2 mỗi phiên bản được biên dịch tương thích với các tập lệnh mà CPU đời hỗ trợ

    bình thường hay lấy bản i386, đổi tên sox.i386.exe => sox.exe chép vào thư mục cài đặt

    Rồi thay thế các đoạn sau........
    Em cảm ơn anh nhiều!





  16. Flashsale Mua Sắm Trực Tuyến Giảm Giá
  17. Khuyến Mại FlashSale

 

 


Flashsale Mua Sắm Trực Tuyến Giảm Giá
  • Khuyến Mại FlashSale

  • Tag của Đề tài này

    Quyền sử dụng

    • Bạn có thể gửi chủ đề mới
    • Bạn có thể gửi trả lời
    • Bạn không thể gửi file đính kèm
    • Bạn có thể tự sửa bài viết của mình
    •  
     
    Tường thuật ra mắt Zenfone 5