What is the equivalent (programmatically) of cat /dev/something > file.txt [closed]
Clash Royale CLAN TAG#URR8PPP
I'm copying a video from a camera stream using a command cat /dev/video0 > file.mpeg
This works perfectly, however I want too break up the file into smaller chunks... So I've been waiting pressing Ctrl+C.. Wanted to automate that so created a batch script that will wait X minutes then halt the job, meanwhile show a progress bar. Works great however I want to take it another step.. I have an XML file that contains the exact times and file names, I have a mono program that parses this file.
Here's the question.. How can I programmatically run this cat command. Sure I could execute a system command. But I was thinking of just doing the entire application in the same language. I can open a file to write as a binary write and read say 1000 bytes at a time... But what is cat doing? Does it know how much/ how fast to read somehow?
cat io
closed as too broad by Rui F Ribeiro, Vlastimil, msp9011, Mr Shunz, Archemar Jan 23 at 15:03
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
add a comment |
I'm copying a video from a camera stream using a command cat /dev/video0 > file.mpeg
This works perfectly, however I want too break up the file into smaller chunks... So I've been waiting pressing Ctrl+C.. Wanted to automate that so created a batch script that will wait X minutes then halt the job, meanwhile show a progress bar. Works great however I want to take it another step.. I have an XML file that contains the exact times and file names, I have a mono program that parses this file.
Here's the question.. How can I programmatically run this cat command. Sure I could execute a system command. But I was thinking of just doing the entire application in the same language. I can open a file to write as a binary write and read say 1000 bytes at a time... But what is cat doing? Does it know how much/ how fast to read somehow?
cat io
closed as too broad by Rui F Ribeiro, Vlastimil, msp9011, Mr Shunz, Archemar Jan 23 at 15:03
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
1
I think and I might be wrong, that thecat
reads and outputs the file as fast as the source device, system and CPU allows.
– Vlastimil
Jan 19 at 4:01
1
You could usedd
to limit how much data is written from the device to stdout or a file.
– Peschke
Jan 19 at 9:04
add a comment |
I'm copying a video from a camera stream using a command cat /dev/video0 > file.mpeg
This works perfectly, however I want too break up the file into smaller chunks... So I've been waiting pressing Ctrl+C.. Wanted to automate that so created a batch script that will wait X minutes then halt the job, meanwhile show a progress bar. Works great however I want to take it another step.. I have an XML file that contains the exact times and file names, I have a mono program that parses this file.
Here's the question.. How can I programmatically run this cat command. Sure I could execute a system command. But I was thinking of just doing the entire application in the same language. I can open a file to write as a binary write and read say 1000 bytes at a time... But what is cat doing? Does it know how much/ how fast to read somehow?
cat io
I'm copying a video from a camera stream using a command cat /dev/video0 > file.mpeg
This works perfectly, however I want too break up the file into smaller chunks... So I've been waiting pressing Ctrl+C.. Wanted to automate that so created a batch script that will wait X minutes then halt the job, meanwhile show a progress bar. Works great however I want to take it another step.. I have an XML file that contains the exact times and file names, I have a mono program that parses this file.
Here's the question.. How can I programmatically run this cat command. Sure I could execute a system command. But I was thinking of just doing the entire application in the same language. I can open a file to write as a binary write and read say 1000 bytes at a time... But what is cat doing? Does it know how much/ how fast to read somehow?
cat io
cat io
edited Jan 19 at 2:25
Jeff Schaller
40.9k1056130
40.9k1056130
asked Jan 19 at 2:20
user1529413user1529413
184
184
closed as too broad by Rui F Ribeiro, Vlastimil, msp9011, Mr Shunz, Archemar Jan 23 at 15:03
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
closed as too broad by Rui F Ribeiro, Vlastimil, msp9011, Mr Shunz, Archemar Jan 23 at 15:03
Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.
1
I think and I might be wrong, that thecat
reads and outputs the file as fast as the source device, system and CPU allows.
– Vlastimil
Jan 19 at 4:01
1
You could usedd
to limit how much data is written from the device to stdout or a file.
– Peschke
Jan 19 at 9:04
add a comment |
1
I think and I might be wrong, that thecat
reads and outputs the file as fast as the source device, system and CPU allows.
– Vlastimil
Jan 19 at 4:01
1
You could usedd
to limit how much data is written from the device to stdout or a file.
– Peschke
Jan 19 at 9:04
1
1
I think and I might be wrong, that the
cat
reads and outputs the file as fast as the source device, system and CPU allows.– Vlastimil
Jan 19 at 4:01
I think and I might be wrong, that the
cat
reads and outputs the file as fast as the source device, system and CPU allows.– Vlastimil
Jan 19 at 4:01
1
1
You could use
dd
to limit how much data is written from the device to stdout or a file.– Peschke
Jan 19 at 9:04
You could use
dd
to limit how much data is written from the device to stdout or a file.– Peschke
Jan 19 at 9:04
add a comment |
1 Answer
1
active
oldest
votes
Let timeout
kill cat
Since it works well enough with cat
and ctrl+c, the following command line should work with data according to the question and assuming 5 seconds play-time to be recorded.
timeout 5 cat /dev/video0 > file.mpeg
cat
is a simple tool for reading/writing data. There is no way to set the speed or time interval for the data transfer in cat
. You have to control it outside cat
. But there are many other tools.
Use the built-in features in ffmpeg
It is also possible to use the multimedia tool ffmpeg
. There is a steep learning curve, but when you get into using it, you will find that it is a very powerful tool. There are detailed instructions in the manual man ffmpeg
but it is better to search for a suitable tutorial via the internet.
I have tested the following command line with conversion from an MTS file to an mpeg file. I have not tested it from a device, but I think it will work. You may want to control the conversion (to be different from the defaults) using more options in the command line.
ffmpeg -t 5 -i /dev/video0 file.mpeg
where -t 5
means that 5 seconds are recorded.
The following command line may be an important improvement,
ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
It will split the input into files of 10 minutes length. you should look at the docs here
ffmpeg
versions
In my working computer with Lubuntu 18.04.1 LTS, there is
ffmpeg version 3.4.4-0ubuntu0.18.04.1
, so version 3.4.4. This is what you get if you install from Ubuntu's repositories. Other linux distros and versions have probably other versions (newer or older).The link (to https://ffmpeg.org) describes version 4.1, and some features in this version may not be there in the older version. This version is more advanced, but may be more complicated to get and to keep up to date with bugfixes.
@user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).
– sudodus
Jan 19 at 6:44
1
Take a look at thetimeout
command, as intimeout $ptime cat ...
, which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code inmono
to replacecat...
, which is a low-research question in itself.)
– roaima
Jan 19 at 10:12
@roaima, Thanks for teaching abouttimeout
:-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.
– sudodus
Jan 19 at 10:53
1
What about improving instead of deleting it? usingffmpeg
is the way to go:ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
will split the input into files of 10 minutes length. you should look at the docs here.
– pizdelect
Jan 19 at 13:38
1
This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.
– user1529413
Jan 19 at 14:40
|
show 4 more comments
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Let timeout
kill cat
Since it works well enough with cat
and ctrl+c, the following command line should work with data according to the question and assuming 5 seconds play-time to be recorded.
timeout 5 cat /dev/video0 > file.mpeg
cat
is a simple tool for reading/writing data. There is no way to set the speed or time interval for the data transfer in cat
. You have to control it outside cat
. But there are many other tools.
Use the built-in features in ffmpeg
It is also possible to use the multimedia tool ffmpeg
. There is a steep learning curve, but when you get into using it, you will find that it is a very powerful tool. There are detailed instructions in the manual man ffmpeg
but it is better to search for a suitable tutorial via the internet.
I have tested the following command line with conversion from an MTS file to an mpeg file. I have not tested it from a device, but I think it will work. You may want to control the conversion (to be different from the defaults) using more options in the command line.
ffmpeg -t 5 -i /dev/video0 file.mpeg
where -t 5
means that 5 seconds are recorded.
The following command line may be an important improvement,
ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
It will split the input into files of 10 minutes length. you should look at the docs here
ffmpeg
versions
In my working computer with Lubuntu 18.04.1 LTS, there is
ffmpeg version 3.4.4-0ubuntu0.18.04.1
, so version 3.4.4. This is what you get if you install from Ubuntu's repositories. Other linux distros and versions have probably other versions (newer or older).The link (to https://ffmpeg.org) describes version 4.1, and some features in this version may not be there in the older version. This version is more advanced, but may be more complicated to get and to keep up to date with bugfixes.
@user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).
– sudodus
Jan 19 at 6:44
1
Take a look at thetimeout
command, as intimeout $ptime cat ...
, which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code inmono
to replacecat...
, which is a low-research question in itself.)
– roaima
Jan 19 at 10:12
@roaima, Thanks for teaching abouttimeout
:-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.
– sudodus
Jan 19 at 10:53
1
What about improving instead of deleting it? usingffmpeg
is the way to go:ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
will split the input into files of 10 minutes length. you should look at the docs here.
– pizdelect
Jan 19 at 13:38
1
This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.
– user1529413
Jan 19 at 14:40
|
show 4 more comments
Let timeout
kill cat
Since it works well enough with cat
and ctrl+c, the following command line should work with data according to the question and assuming 5 seconds play-time to be recorded.
timeout 5 cat /dev/video0 > file.mpeg
cat
is a simple tool for reading/writing data. There is no way to set the speed or time interval for the data transfer in cat
. You have to control it outside cat
. But there are many other tools.
Use the built-in features in ffmpeg
It is also possible to use the multimedia tool ffmpeg
. There is a steep learning curve, but when you get into using it, you will find that it is a very powerful tool. There are detailed instructions in the manual man ffmpeg
but it is better to search for a suitable tutorial via the internet.
I have tested the following command line with conversion from an MTS file to an mpeg file. I have not tested it from a device, but I think it will work. You may want to control the conversion (to be different from the defaults) using more options in the command line.
ffmpeg -t 5 -i /dev/video0 file.mpeg
where -t 5
means that 5 seconds are recorded.
The following command line may be an important improvement,
ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
It will split the input into files of 10 minutes length. you should look at the docs here
ffmpeg
versions
In my working computer with Lubuntu 18.04.1 LTS, there is
ffmpeg version 3.4.4-0ubuntu0.18.04.1
, so version 3.4.4. This is what you get if you install from Ubuntu's repositories. Other linux distros and versions have probably other versions (newer or older).The link (to https://ffmpeg.org) describes version 4.1, and some features in this version may not be there in the older version. This version is more advanced, but may be more complicated to get and to keep up to date with bugfixes.
@user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).
– sudodus
Jan 19 at 6:44
1
Take a look at thetimeout
command, as intimeout $ptime cat ...
, which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code inmono
to replacecat...
, which is a low-research question in itself.)
– roaima
Jan 19 at 10:12
@roaima, Thanks for teaching abouttimeout
:-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.
– sudodus
Jan 19 at 10:53
1
What about improving instead of deleting it? usingffmpeg
is the way to go:ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
will split the input into files of 10 minutes length. you should look at the docs here.
– pizdelect
Jan 19 at 13:38
1
This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.
– user1529413
Jan 19 at 14:40
|
show 4 more comments
Let timeout
kill cat
Since it works well enough with cat
and ctrl+c, the following command line should work with data according to the question and assuming 5 seconds play-time to be recorded.
timeout 5 cat /dev/video0 > file.mpeg
cat
is a simple tool for reading/writing data. There is no way to set the speed or time interval for the data transfer in cat
. You have to control it outside cat
. But there are many other tools.
Use the built-in features in ffmpeg
It is also possible to use the multimedia tool ffmpeg
. There is a steep learning curve, but when you get into using it, you will find that it is a very powerful tool. There are detailed instructions in the manual man ffmpeg
but it is better to search for a suitable tutorial via the internet.
I have tested the following command line with conversion from an MTS file to an mpeg file. I have not tested it from a device, but I think it will work. You may want to control the conversion (to be different from the defaults) using more options in the command line.
ffmpeg -t 5 -i /dev/video0 file.mpeg
where -t 5
means that 5 seconds are recorded.
The following command line may be an important improvement,
ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
It will split the input into files of 10 minutes length. you should look at the docs here
ffmpeg
versions
In my working computer with Lubuntu 18.04.1 LTS, there is
ffmpeg version 3.4.4-0ubuntu0.18.04.1
, so version 3.4.4. This is what you get if you install from Ubuntu's repositories. Other linux distros and versions have probably other versions (newer or older).The link (to https://ffmpeg.org) describes version 4.1, and some features in this version may not be there in the older version. This version is more advanced, but may be more complicated to get and to keep up to date with bugfixes.
Let timeout
kill cat
Since it works well enough with cat
and ctrl+c, the following command line should work with data according to the question and assuming 5 seconds play-time to be recorded.
timeout 5 cat /dev/video0 > file.mpeg
cat
is a simple tool for reading/writing data. There is no way to set the speed or time interval for the data transfer in cat
. You have to control it outside cat
. But there are many other tools.
Use the built-in features in ffmpeg
It is also possible to use the multimedia tool ffmpeg
. There is a steep learning curve, but when you get into using it, you will find that it is a very powerful tool. There are detailed instructions in the manual man ffmpeg
but it is better to search for a suitable tutorial via the internet.
I have tested the following command line with conversion from an MTS file to an mpeg file. I have not tested it from a device, but I think it will work. You may want to control the conversion (to be different from the defaults) using more options in the command line.
ffmpeg -t 5 -i /dev/video0 file.mpeg
where -t 5
means that 5 seconds are recorded.
The following command line may be an important improvement,
ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
It will split the input into files of 10 minutes length. you should look at the docs here
ffmpeg
versions
In my working computer with Lubuntu 18.04.1 LTS, there is
ffmpeg version 3.4.4-0ubuntu0.18.04.1
, so version 3.4.4. This is what you get if you install from Ubuntu's repositories. Other linux distros and versions have probably other versions (newer or older).The link (to https://ffmpeg.org) describes version 4.1, and some features in this version may not be there in the older version. This version is more advanced, but may be more complicated to get and to keep up to date with bugfixes.
edited Jan 19 at 15:42
answered Jan 19 at 4:04
sudodussudodus
1,49337
1,49337
@user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).
– sudodus
Jan 19 at 6:44
1
Take a look at thetimeout
command, as intimeout $ptime cat ...
, which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code inmono
to replacecat...
, which is a low-research question in itself.)
– roaima
Jan 19 at 10:12
@roaima, Thanks for teaching abouttimeout
:-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.
– sudodus
Jan 19 at 10:53
1
What about improving instead of deleting it? usingffmpeg
is the way to go:ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
will split the input into files of 10 minutes length. you should look at the docs here.
– pizdelect
Jan 19 at 13:38
1
This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.
– user1529413
Jan 19 at 14:40
|
show 4 more comments
@user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).
– sudodus
Jan 19 at 6:44
1
Take a look at thetimeout
command, as intimeout $ptime cat ...
, which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code inmono
to replacecat...
, which is a low-research question in itself.)
– roaima
Jan 19 at 10:12
@roaima, Thanks for teaching abouttimeout
:-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.
– sudodus
Jan 19 at 10:53
1
What about improving instead of deleting it? usingffmpeg
is the way to go:ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
will split the input into files of 10 minutes length. you should look at the docs here.
– pizdelect
Jan 19 at 13:38
1
This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.
– user1529413
Jan 19 at 14:40
@user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).
– sudodus
Jan 19 at 6:44
@user1529413, The community is downvoting this answer. If you find it useful, please let me know. Otherwise I will delete it (after some time for you to test it).
– sudodus
Jan 19 at 6:44
1
1
Take a look at the
timeout
command, as in timeout $ptime cat ...
, which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code in mono
to replace cat...
, which is a low-research question in itself.)– roaima
Jan 19 at 10:12
Take a look at the
timeout
command, as in timeout $ptime cat ...
, which seems to do pretty much everything your script does. (Not entirely sure why you're being downvoted, other than the OP asked for code in mono
to replace cat...
, which is a low-research question in itself.)– roaima
Jan 19 at 10:12
@roaima, Thanks for teaching about
timeout
:-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.– sudodus
Jan 19 at 10:53
@roaima, Thanks for teaching about
timeout
:-) I replaced the separate 'sleep' and 'kill' commands with 'timeout', and the shellscript with a oneliner. Now let us wait for the response from the OP.– sudodus
Jan 19 at 10:53
1
1
What about improving instead of deleting it? using
ffmpeg
is the way to go: ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
will split the input into files of 10 minutes length. you should look at the docs here.– pizdelect
Jan 19 at 13:38
What about improving instead of deleting it? using
ffmpeg
is the way to go: ffmpeg -i /dev/video0 -f segment -segment_time 10:0 out%03d.mp4
will split the input into files of 10 minutes length. you should look at the docs here.– pizdelect
Jan 19 at 13:38
1
1
This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.
– user1529413
Jan 19 at 14:40
This is very helpful information, it annoys me to no end that's it's been down voted before I can even see it. Stack overflow has a major problem it needs to address, you've created a system that chases away people. This comment no doubt will be down voted as well.
– user1529413
Jan 19 at 14:40
|
show 4 more comments
1
I think and I might be wrong, that the
cat
reads and outputs the file as fast as the source device, system and CPU allows.– Vlastimil
Jan 19 at 4:01
1
You could use
dd
to limit how much data is written from the device to stdout or a file.– Peschke
Jan 19 at 9:04