VLC 命令列批次視訊轉換

VLC 命令列批次視訊轉換

我正在嘗試將一些 .webm 檔案轉換為 mp4。在 GUI 中,我選擇以下轉換設定:

影片:

  • 編解碼器:H-264
  • 項目清單
  • 位元速率:512 kb/s
  • 幀速率:23.97 fps
  • 規模:1

聲音的:

  • 編解碼器:MPEG 4 音訊 (AAC)
  • 位元速率:128 kb/s
  • 頻道:2
  • 取樣率:44100

而且效果非常好。現在我想將我的所有 webm 視訊檔案批次轉換為 mp4。所以我嘗試這個批次腳本(主要採取形式VLC 維基頁面


@echo off
FOR /R %%G IN (*.webm) DO (CALL :SUB_VLC "%%G")
GOTO :eof

:SUB_VLC
 SET _firstbit=%1
 SET _qt="
 CALL SET _newnm=%%_firstbit:%_qt%=%%
 SET _commanm=%_newnm:,=_COMMA_%
 echo %_commanm%
 CALL "C:\Program Files (x86)\VideoLAN\VLC\vlc" -I dummy -vvv %1 --sout=#transcode{vcodec="h264", vb="512", fps="23.97", scale="1", acodec="mpga",ab="128","channels=2",samplerate="44100"}:standard{access="file",mux="dummy",dst="%_commanm%.mp4"} vlc://quit
GOTO :eof

:eof

但它似乎不起作用(即我沒有得到任何輸出)。相反,我在 vlc 的虛擬視窗上收到這些訊息:


[023332fc] dummy interface: VLC media player - 1.1.11 The Luggage
[023332fc] dummy interface: Copyright © 1996-2011 the VideoLAN team
[023332fc] dummy interface:
Warning: if you can't access the GUI anymore, open a command-line window, go to
the directory where you installed VLC and run "vlc -I qt"

[023332fc] dummy interface: using the dummy interface module...
[023332fc] main interface debug: using interface module "dummy"
[023332fc] main interface debug: TIMER module_need() : 45.000 ms - Total 45.000
ms / 1 intvls (Avg 45.000 ms)
[02315e04] main playlist debug: rebuilding array of current - root Playlist
[02315e04] main playlist debug: rebuild done - 5 items, index -1
[02315e04] main playlist debug: processing request item null node Playlist skip
0
[02315e04] main playlist debug: starting new item
[02315e04] main playlist debug: creating new input thread
[022ffbe4] main input debug: Creating an input for 'a.webm'
[022ffbe4] main input debug: thread (input) created at priority 1 (../.././src/i
nput/input.c:220)
[022ffbe4] main input debug: thread started
[02343144] main stream output debug: using sout chain=`transcode{vcodec=h264,'
[02343144] main stream output debug: stream=`transcode'
[023400dc] main stream out debug: looking for sout stream module: 1 candidate
[023400dc] stream_out_transcode stream out error: cannot create chain
[023400dc] main stream out debug: no sout stream module matching "transcode" cou
ld be loaded
[023400dc] main stream out debug: TIMER module_need() : 5.000 ms - Total 5.000 m
s / 1 intvls (Avg 5.000 ms)
[023400dc] main stream out debug: destroying chain... (name=(null))
[023400dc] main stream out debug: destroying chain done
[02343144] main stream output error: stream chain failed for `transcode{vcodec=h
264,'
[022ffbe4] main input error: cannot start stream output instance, aborting
[02315e04] main playlist debug: finished input
[022ffbe4] main input debug: thread ended
[02315e04] main playlist debug: dead input
[022ffbe4] main input debug: thread times: real 0m0.015000s, kernel 0m0.000000s,
 user 0m0.000000s
[022ffbe4] main input debug: TIMER input launching for 'a.webm' : 15.000 ms - To
tal 15.000 ms / 1 intvls (Avg 15.000 ms)
[02315e04] main playlist debug: changing item without a request (current 0/5)
[02315e04] main playlist debug: using item 1
[02315e04] main playlist debug: starting new item
[02315e04] main playlist debug: creating new input thread
[022ffbe4] main input debug: Creating an input for 'New Folder/vb=512,'
[022ffbe4] main input debug: thread started
[022ffbe4] main input debug: thread (input) created at priority 1 (../.././src/i
nput/input.c:220)
[02343204] main stream output debug: using sout chain=`transcode{vcodec=h264,'
[02343204] main stream output debug: stream=`transcode'
[02340194] main stream out debug: looking for sout stream module: 1 candidate
[02340194] stream_out_transcode stream out error: cannot create chain
[02340194] main stream out debug: no sout stream module matching "transcode" cou
ld be loaded
[02340194] main stream out debug: TIMER module_need() : 5.000 ms - Total 5.000 m
s / 1 intvls (Avg 5.000 ms)
[02340194] main stream out debug: destroying chain... (name=(null))
[02340194] main stream out debug: destroying chain done
[02343204] main stream output error: stream chain failed for `transcode{vcodec=h
264,'
[022ffbe4] main input error: cannot start stream output instance, aborting
[02315e04] main playlist debug: finished input
[022ffbe4] main input debug: thread ended
[02315e04] main playlist debug: dead input
[022ffbe4] main input debug: thread times: real 0m0.030000s, kernel 0m0.000000s,
 user 0m0.000000s
[022ffbe4] main input debug: TIMER input launching for 'New Folder/vb=512,' : 30
.000 ms - Total 30.000 ms / 1 intvls (Avg 30.000 ms)
[02315e04] main playlist debug: changing item without a request (current 1/5)
[02315e04] main playlist debug: using item 2
[02315e04] main playlist debug: starting new item
[02315e04] main playlist debug: creating new input thread
[022ffbe4] main input debug: Creating an input for 'New Folder/fps=23.97,'
[022ffbe4] main input debug: thread (input) created at priority 1 (../.././src/i
nput/input.c:220)
[022ffbe4] main input debug: thread started
[02343144] main stream output debug: using sout chain=`transcode{vcodec=h264,'
[02343144] main stream output debug: stream=`transcode'
[02315e04] main playlist debug: meta ok for (null), need to fetch art
[0231871c] main stream out debug: looking for sout stream module: 1 candidate
[02cd3b5c] main demux meta debug: looking for meta fetcher module: 1 candidate
[0231871c] stream_out_transcode stream out error: cannot create chain
[02cd3b5c] lua demux meta debug: Trying Lua scripts in C:\Users\mmz\AppData\Roam
ing\vlc\lua\meta\fetcher
[0231871c] main stream out debug: no sout stream module matching "transcode" cou
ld be loaded
[02cd3b5c] lua demux meta debug: Trying Lua scripts in C:\Program Files (x86)\Vi
deoLAN\VLC\lua\meta\fetcher
[0231871c] main stream out debug: TIMER module_need() : 0.000 ms - Total 0.000 m
s / 1 intvls (Avg 0.000 ms)
[0231871c] main stream out debug: destroying chain... (name=(null))
[02cd3b5c] lua demux meta debug: Trying Lua playlist script C:\Program Files (x8
6)\VideoLAN\VLC\lua\meta\fetcher\tvrage.lua
[0231871c] main stream out debug: destroying chain done
[02343144] main stream output error: stream chain failed for `transcode{vcodec=h
264,'
[02cd3b5c] main demux meta debug: using meta fetcher module "lua"
[022ffbe4] main input error: cannot start stream output instance, aborting
[02315e04] main playlist debug: finished input
[02cd3b5c] main demux meta debug: TIMER module_need() : 5.000 ms - Total 5.000 m
s / 1 intvls (Avg 5.000 ms)
[022ffbe4] main input debug: thread ended
[02315e04] main playlist debug: dead input
[02cd3b5c] main demux meta debug: removing module "lua"
[022ffbe4] main input debug: thread times: real 0m0.010000s, kernel 0m0.000000s,
 user 0m0.000000s
[02315e04] main playlist debug: searching art for a.webm
[022ffbe4] main input debug: TIMER input launching for 'New Folder/fps=23.97,' :
 15.000 ms - Total 15.000 ms / 1 intvls (Avg 15.000 ms)
[02315e04] main playlist debug: changing item without a request (current 2/5)
[022c74d4] main art finder debug: looking for art finder module: 2 candidates
[02315e04] main playlist debug: using item 3
[022c74d4] lua art finder debug: Trying Lua scripts in C:\Users\mmz\AppData\Roam
ing\vlc\lua\meta\art
[02315e04] main playlist debug: starting new item
[022c74d4] lua art finder debug: Trying Lua scripts in C:\Program Files (x86)\Vi
deoLAN\VLC\lua\meta\art
[02315e04] main playlist debug: creating new input thread
[022c74d4] lua art finder debug: Trying Lua playlist script C:\Program Files (x8
6)\VideoLAN\VLC\lua\meta\art\01_googleimage.lua
[022ffbe4] main input debug: Creating an input for 'New Folder/scale=1,'
[022c74d4] lua art finder debug: Trying Lua playlist script C:\Program Files (x8
6)\VideoLAN\VLC\lua\meta\art\02_frenchtv.lua
[022ffbe4] main input debug: thread (input) created at priority 1 (../.././src/i
nput/input.c:220)
[022ffbe4] main input debug: thread started
[022c74d4] lua art finder debug: Trying Lua playlist script C:\Program Files (x8
6)\VideoLAN\VLC\lua\meta\art\03_lastfm.lua
[02ca2f6c] main stream output debug: using sout chain=`transcode{vcodec=h264,'
[02ca2f6c] main stream output debug: stream=`transcode'
[022c74d4] lua art finder debug: Trying Lua playlist script C:\Program Files (x8
6)\VideoLAN\VLC\lua\meta\art\04_musicbrainz.lua
[023187d4] main stream out debug: looking for sout stream module: 1 candidate
[023187d4] stream_out_transcode stream out error: cannot create chain
[022c74d4] main art finder debug: no art finder module matching "any" could be l
oaded
[023187d4] main stream out debug: no sout stream module matching "transcode" cou
ld be loaded
[022c74d4] main art finder debug: TIMER module_need() : 10.000 ms - Total 10.000
 ms / 1 intvls (Avg 10.000 ms)
[02315e04] main playlist debug: art not found for a.webm
[023187d4] main stream out debug: TIMER module_need() : 10.000 ms - Total 10.000
 ms / 1 intvls (Avg 10.000 ms)
[023187d4] main stream out debug: destroying chain... (name=(null))
[023187d4] main stream out debug: destroying chain done
[02ca2f6c] main stream output error: stream chain failed for `transcode{vcodec=h
264,'
[022ffbe4] main input error: cannot start stream output instance, aborting
[02315e04] main playlist debug: finished input
[022ffbe4] main input debug: thread ended
[02315e04] main playlist debug: dead input
[022ffbe4] main input debug: thread times: real 0m0.015000s, kernel 0m0.000000s,
 user 0m0.015600s
[022ffbe4] main input debug: TIMER input launching for 'New Folder/scale=1,' : 1
5.000 ms - Total 15.000 ms / 1 intvls (Avg 15.000 ms)
[02315e04] main playlist debug: changing item without a request (current 3/5)
[02315e04] main playlist debug: using item 4
[02315e04] main playlist debug: starting new item
[02315e04] main playlist debug: creating new input thread
[022ffbe4] main input debug: Creating an input for 'a.webm.mp4}'
[022ffbe4] main input debug: thread (input) created at priority 1 (../.././src/i
nput/input.c:220)
[022ffbe4] main input debug: thread started
[02ca302c] main stream output debug: using sout chain=`transcode{vcodec=h264,'
[02ca302c] main stream output debug: stream=`transcode'
[02cc8c24] main stream out debug: looking for sout stream module: 1 candidate
[02cc8c24] stream_out_transcode stream out error: cannot create chain
[02cc8c24] main stream out debug: no sout stream module matching "transcode" cou
ld be loaded
[02cc8c24] main stream out debug: TIMER module_need() : 0.000 ms - Total 0.000 m
s / 1 intvls (Avg 0.000 ms)
[02cc8c24] main stream out debug: destroying chain... (name=(null))
[02cc8c24] main stream out debug: destroying chain done
[02ca302c] main stream output error: stream chain failed for `transcode{vcodec=h
264,'
[022ffbe4] main input error: cannot start stream output instance, aborting
[02315e04] main playlist debug: finished input
[022ffbe4] main input debug: thread ended
[02315e04] main playlist debug: dead input
[022ffbe4] main input debug: thread times: real 0m0.015000s, kernel 0m0.015600s,
 user 0m0.000000s
[022ffbe4] main input debug: TIMER input launching for 'a.webm.mp4}' : 15.000 ms
 - Total 15.000 ms / 1 intvls (Avg 15.000 ms)
[02315e04] main playlist debug: changing item without a request (current 4/5)
[02315e04] main playlist debug: nothing to play

我究竟做錯了什麼?

答案1

我正在根據我的評論做出回答,我認為這是您問題的原因。

在你的腳本中你使用

 CALL "C:\Program Files (x86)\VideoLAN\VLC\vlc" -I dummy -vvv %1 --sout=#transcode{vcodec="h264", vb="512", fps="23.97", scale="1", acodec="mpga",ab="128","channels=2",samplerate="44100"}:standard{access="file",mux="dummy",dst="%_commanm%.mp4"} vlc://quit

錯誤顯示

main stream output error: stream chain failed for `transcode{vcodec=h264,'

這讓我得出這樣的結論:解析器會剪切每個空格(空格、製表符等),因此無法理解該指令。在 VLC wiki 的連結中也沒有空格。

試試這一行:

CALL "C:\Program Files (x86)\VideoLAN\VLC\vlc" -I dummy -vvv %1 --sout=#transcode{vcodec="h264",vb="512",fps="23.97",scale="1",acodec="mpga",ab="128","channels=2",samplerate="44100"}:standard{access="file",mux="dummy",dst="%_commanm%.mp4"} vlc://quit

為什麼 vlc 不能處理你可能會問的那些愚蠢的空格? (實際上你是這樣做的;))

當一個程式被作業系統呼叫執行時 - 我只知道Linux確實如此,但我很確定Windows處理它非常相似 - 命令的參數由作業系統(在空格處)分割,然後作為列表交給程序,每個列表僅包含空格之間的內容。

因此,程式的任務是識別和讀取該清單中的所有單獨條目並將它們再次粘合在一起,這確實是可能的,但在開發軟體和評估參數時都會花費時間。

答案2

為了將我的攝影機 .mod 檔案轉換為 .m4v,在 Linux 中我編寫了這個腳本

#!/bin/sh
NAME=`echo "$1" | cut -d'.' -f1`
vlc $1 -I dummy --play-and-exit --sout='#transcode{vcodec=h264,acodec=mp4a,ab=128,samplerate=44100,deinterlace,audio-sync}:std{access=file, mux=mp4,dst=./'"$NAME"'.m4v}

我已經給它起了名字mod2h264.sh並使其可執行。

然後在命令列中輸入

for file in *.MOD; do ~/MyScripts/mod2h264.sh "$file"; done

然後轉換目前目錄中的所有 .MOD 檔案。您可以調整選項以符合您所需的輸出。

相關內容