批处理之家's Archiver

netdzb 发表于 2019-6-24 10:53

Shell问题请教,参数如何传递

自己写了一半,后续不知道怎么写?

#!/bin/bash
for FILE in *.扩展名;
    do
        命令 "$FILE" 命令参数逐行存在文本里面,需要逐行传递参数
    done

请给予指点,谢谢。

cfwyy77_bat 发表于 2019-6-24 15:46

[i=s] 本帖最后由 cfwyy77_bat 于 2019-6-24 16:08 编辑 [/i]

下面是按行打印的例子,不知是不是你想要的意思。[code]
#!/bin/bash
#按行分割
IFS=$'\n'
for line in `cat file.txt`
do
    echo $line
done[/code]或者 用while +重定向[code]
#!/bin/bash
while read line
do
   echo $line
done < file.txt[/code]

netdzb 发表于 2019-6-24 17:29

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221309&ptid=53137]2#[/url] [i]cfwyy77_bat[/i] [/b]

多谢,我去试试看。

netdzb 发表于 2019-6-24 17:59

[i=s] 本帖最后由 netdzb 于 2019-6-24 18:01 编辑 [/i]

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221309&ptid=53137]2#[/url] [i]cfwyy77_bat[/i] [/b]

假设文本的book.txt存放的是码率信息,

1000k
2000k
3000k
4000k
5000k

目录下有5个视频文件。

如何通过文本把码率参数传进去,用ffmpeg进行转码呢?

Batcher 发表于 2019-6-25 08:31

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=221318&ptid=53137]4#[/url] [i]netdzb[/i] [/b]


看看还需要加什么参数:[code]#!/bin/bash
paste <(ls *.mp3) book.txt | while read LINE; do
    echo ffmpeg $LINE
done[/code]

cfwyy77_bat 发表于 2019-6-25 09:44

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221318&ptid=53137]4#[/url] [i]netdzb[/i] [/b]
每个视频文件都要转成book.txt中的各种码率?还是说一个文件对应每行的一种码率?

netdzb 发表于 2019-6-25 09:56

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221361&ptid=53137]6#[/url] [i]cfwyy77_bat[/i] [/b]

book.txt第一行对应第一个视频的码率,第二行对应第二个,依次类推。

下面的脚本有问题,跑不通,帮忙看看。

#!/bin/bash
for FILE in *.mp4;
do
  ffmpeg -i $FILE -c:v libx264 -c:a copy -b:v  paste < book.txt | while read LINE $FILE.*-.mp4
                ~~~~~                                                                                                ~~~~~~~~~~
                输入                                                                                                       输出
done

Batcher 发表于 2019-6-25 10:30

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=221363&ptid=53137]7#[/url] [i]netdzb[/i] [/b][code]#!/bin/bash
paste <(ls *.mp3) book.txt | while read LINE; do
    ffmpeg -i $LINE -c:v libx264 -c:a copy -b:v
done[/code]

netdzb 发表于 2019-6-25 10:46

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221366&ptid=53137]8#[/url] [i]Batcher[/i] [/b]

跑不通,不知道错在哪里。已经换到unix格式了。


$ bash shi.sh
shi.sh: line 5: syntax error near unexpected token `done'
shi.sh: line 5: `done'

Administrator@USER-20151226SM /i/jiemi

cfwyy77_bat 发表于 2019-6-25 10:56

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221363&ptid=53137]7#[/url] [i]netdzb[/i] [/b]


你写的那个让人看不懂。

可以试试这个,ffmpeg的参数的写法自己看,我没怎么用过ffmpeg.[code]
#!/bin/bash
file=(`ls *.mp4`)
bitRate=(`cat book.txt`)
for i in `seq 0 1 4`
do
   ffmpeg -i ${file[$i]} -c:v libx264 -c:a copy -b:v ${bitRate[$i]}  ${bitRate[$i]}-${file[$i]}
done[/code]

netdzb 发表于 2019-6-25 11:03

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221368&ptid=53137]10#[/url] [i]cfwyy77_bat[/i] [/b]

我的shell好像坏了,居然不认识done。下面的代码会跑不通的,奇怪了。

#!/bin/bash
while read LINE
do
    echo $LINE
done < book.txt

cfwyy77_bat 发表于 2019-6-25 11:09

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221369&ptid=53137]11#[/url] [i]netdzb[/i] [/b]
写法应该没问题,换行符格式对不对?

netdzb 发表于 2019-6-25 11:13

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221371&ptid=53137]12#[/url] [i]cfwyy77_bat[/i] [/b]

是换行符的问题,搞定了。
可惜显示的book.txt缺少最后一行,也不知道问题出在哪里?

netdzb 发表于 2019-6-25 12:14

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221366&ptid=53137]8#[/url] [i]Batcher[/i] [/b]

脚本跑不通,是不是我的shell有问题啊?

控制台直接输入下面
paste < ls    // 命令报错
ls | paste     // 可以通过

上面的2条命令都合法吗?还是第1条命令不合法,第2条命令合法。

Batcher 发表于 2019-6-25 12:20

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=221374&ptid=53137]14#[/url] [i]netdzb[/i] [/b][code]paste <(ls *.mp3) book.txt[/code]执行这个命令把完整的报错信息发出来看看
另外你用的什么操作系统呢,RHEL? CentOS? Ubuntu? AIX? Solaris? 具体是哪个版本呢

netdzb 发表于 2019-6-25 13:27

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221376&ptid=53137]15#[/url] [i]Batcher[/i] [/b]

$ paste < (ls *.mp4) book.txt
sh: syntax error near unexpected token `('

我是windows xp环境,装的msys 1.0,看来兼容性还是有问题啊。

cfwyy77_bat 发表于 2019-6-25 15:10

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=221372&ptid=53137]13#[/url] [i]netdzb[/i] [/b]


    看你另开的一个帖子,我的回复。

Batcher 发表于 2019-6-26 13:29

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=221380&ptid=53137]16#[/url] [i]netdzb[/i] [/b][code]#!/bin/bash
COUNT=0
for FILE in *.mp3; do
    let COUNT+=1
    # ffmpeg需要的参数你自己添加
    echo ffmpeg $FILE $(sed -n "${COUNT}p" "book.txt")
done[/code]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.